X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=family_tree_of_functional_programming_languages.mdwn;h=dd4c1c3cb1cdf5d3be75766dbdd87cc8b6a8da71;hp=f13929daca8ecba8a584cc90c13a8f34d5b90476;hb=7e0ff6635f98a9139894d40e79e01e05e53abb87;hpb=399f4aa37f2dbcd96af05a841056c2da33e38ca1 diff --git a/family_tree_of_functional_programming_languages.mdwn b/family_tree_of_functional_programming_languages.mdwn index f13929da..dd4c1c3c 100644 --- a/family_tree_of_functional_programming_languages.mdwn +++ b/family_tree_of_functional_programming_languages.mdwn @@ -12,9 +12,9 @@ typed and those that are statically typed. The **dynamically typed** languages give types more of a background role in the program. They include the Lisp family (which in turn includes all the variants -of [[!wikipedia Scheme]], and also [[!wikipedia Common Lisp]], and [[!wikipedia -Clojure]]). They also include [[!wikipedia Erlang]] and [[!wikipedia Joy]] and -[[!wikipedia Pure]], and others. +of [[!wikipedia Scheme (programming language) desc="Scheme"]], and also [[!wikipedia Common Lisp]], and [[!wikipedia +Clojure]]). They also include [[!wikipedia Erlang (programming language) desc="Erlang"]] and [[!wikipedia Joy (programming language) desc="Joy"]] and +[[!wikipedia Pure (programming language) desc="Pure"]], and others. Although these languages are hospitable to functional programming, some of them also permit you to write *imperatival* code (that is, code with *side-effects*) @@ -99,15 +99,19 @@ the seminar. 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 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 +languages with strict/eager evaluation. These include [[!wikipedia Standard ML desc="SML"]] and +[[!wikipedia Caml]] and [[!wikipedia Nemerle]]. SML in turn has several variants +or implementations: [[!wikipedia MLton]], [[!wikipedia SML/NJ]], [[!wikipedia Moscow ML]], +and [[!wikipedia Mythryl]]. + +Other statically-typed functional languages with strict/eager evaluation are +[[!wikipedia Scala (programming language) desc="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 (programming language) desc="Miranda"]] and [[!wikipedia Haskell (programming language) desc="Haskell"]] are 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