[Haskell-cafe] head as a total function

Jared Updike jupdike at gmail.com
Thu Sep 7 15:06:08 EDT 2006


> > it was the first imperative language supporting closures, after all
>
> Uh, what about lisp?

For those who read the "Foozles" slides posted earlier [0], I must say
he nailed this one, on slide 2.

> The (MIT) lisp 1.4 manual (ca. 1965) refers to
> FUNCTION differing from QUOTE in that it handled free variables
> "correctly"; I take this to mean that at least a primitive form of
> closure was provided.

Steele's work on Scheme helped Lisp programmers take lexical scoping
seriously [1]; these ideas and a method for efficient implementation
were attributed to Algol [2]. That lexical scope was available in some
dialect of Lisp, even very early on, doesn't surprise me (and
according to [3] is the case). But I do think dynamic scoping took a
while to "die out" as generally accepted Lisp practice (it does still
exist in Common LISP, with a special keyword, IIRC) and that Scheme
(late 1970s) helped to effect that.

> Moreover, a language that provides SET/SETQ,
> RPLACA/RPLACD and the PROG feature (including labels and a goto) surely
> qualifies as imperative?

Haskell has been called the best imperative programming language ever.
:-) I mean, Haskell has IORef and friends, right?

  Jared.

[0] http://hope.cs.rice.edu/twiki/pub/WG211/M3Schedule/foozles.pdf
[1] Tenth paragraph, this page: http://www.lisp.org/table/Lisp-History.html
[2] Steele's Rabbit compiler paper, p.13. See also Steele's Lambda papers
[3] Steele and Gabriel, Evolution of Lisp.


More information about the Haskell-Cafe mailing list