reformatted family_tree
authorJim Pryor <profjim@jimpryor.net>
Tue, 24 Aug 2010 22:07:22 +0000 (18:07 -0400)
committerJim Pryor <profjim@jimpryor.net>
Tue, 24 Aug 2010 22:07:22 +0000 (18:07 -0400)
Signed-off-by: Jim Pryor <profjim@jimpryor.net>
family_tree_of_functional_programming_languages.mdwn

index fd861d3..90db24e 100644 (file)
@@ -93,31 +93,31 @@ experiences of older languages like C and Java.
 
 Most functional programming languages these days are statically typed.
 
-We can further divide these languages based on whether they use *lazy* or
-*strict/eager* evaluation. We'll discuss the difference between these during
+We can further divide these languages based on whether they use lazy or
+strict/eager evaluation. We'll discuss the difference between these during
 the seminar.
 
-Most programming languages, functional or not, use strict/eager evaluation. For
+Most programming languages, functional or not, use **strict/eager evaluation**. For
 instance, languages of the ML family are all statically-typed functional
 languages with strict/eager evaluation. These include [[!wikipedia SML]] and
 [[!wikipedia Caml]] and [[!wikipedia Nemerle]]. Other statically-typed
-functional languages with strict/eager semantics are [[!wikipedia Scala]] and
+functional languages with strict/eager evaluation are [[!wikipedia Scala]] and
 [[!wikipedia Coq]]. Like Scheme, many of these languages permit *imperatival*
 as well as functional coding; but they are regarded as functional programming
 languages because they are so hospitable to functional programming, and give it
 a central place in their design.
 
 A few languages such as [[!wikipedia Miranda]] and [[!wikipedia Haskell]] are
-statically-typed languages that instead mostly use lazy evaluation. However,
+statically-typed languages that instead mostly use **lazy evaluation**. However,
 it'd be more strictly accurate to say Haskell is lazy *by default*. You can
 also make Haskell evaluate some expressions strictly/eagerly; you just have to
-be ask for that explicitly. (I don't know about Miranda.) Languages like OCaml
+ask for that explicitly. (I don't know about Miranda.) Languages like OCaml
 are the reverse: they're strict/eager by default, but you can get lazy
 evaluation where it's needed, you just have to ask for it explicitly.
 
 Unlike OCaml, Haskell is much more extreme about being non-imperatival. Though
 it's possible to write imperative code in Haskell, too; one just has to
-encapsulate it in a ST or IO *monad*. We'll be discussing in the seminar how
+encapsulate it in an "ST" or "IO" *monad*. We'll be discussing in the seminar how
 monads can be used to create purely functional representations of imperatival
 algorithms. (You can do the same in languages like Scheme and OCaml, too.
 What's different is that in Haskell monads are the *only* way to deal with
@@ -126,4 +126,3 @@ imperatival code.)
 We'll talk much more about monads, lazy vs strict evaluation, and functional vs
 imperatival code as we proceed.
 
-