
On 8/02/2011, at 10:43 AM, Roel van Dijk wrote:
On 7 February 2011 22:00, Andrew Coppin
wrote: I clearly have my languages mixed up.
The language I'm thinking of required all variables (even top-level ones) to be declared with "let" - unless the definition is recursive, in which case you have to say "letrec" (i.e., the compiler it too stupid to deduce this automatically). Apparently that isn't Clean...
You are not necessarily wrong. The Clean of 1987—1994 sounds a lot like the language you are talking about.
1 - http://www.cs.ru.nl/~thomas/publications/groj10-exchanging-sources-between.p...
No, it doesn't. Here's an example from "Clean - A Language for Functional Graph Rewriting", T.H. Brus, M.C.J.D. van Eekelen, M.O. van Leer, M.J. Plasmeijer, a 1987 paper which I _think_ is the first one about Clean: Start stdin -> Double (Add (Succ Zero) Zero); Double a -> Add a a; Add Zero n ->n | Add (Succ m) n ->Succ (Add m n); You will notice - an entire absence of 'let' - an entire absence of any 'letrec' You'll also discover that Clean was originally - thought of as an intermediate language - a subset of something called LEAN Clean 1 adopted Haskell-like syntax, but it was lazy from the beginning.