If we wish to preserve global uniqueness of names during \(\beta\)-reduction, we have to \(\alpha\)-rename before each substitution. Consider:
Haskell puts all side effects in the IO
monad, which passes around the
RealWorld
. This is unsatisfactory for a number of reasons, and Haskellers have spilled much ink on effects systems.
As I recently noted, there are
distinctions in how one handles effects at the logical level: in particular,
randomness is different from array writes.
C has a reputation for being a "hacker" language, in contrast to say Haskell, which is abstract with ties to logic and category theory. There is even the quip "C is a portable assembler".
Logic programming fails for many reasons; interestingly it fails to integrate
with imperative programming or export its constructs. Haskell's monadic
I/O—explicitly passing a RealWorld
—offers a nice demonstration.
Egison advocates a pattern-match oriented style of programming and offers poker hands as an example:
prev | next