[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: What's so cool about Scheme?
Matt Hellige wrote:
> How did the label "functional" get stuck to Lisp/Scheme anyway?
> Lispers don't seem to like it, and functional programmers certainly
> don't like it...
If any languages have a claim to the label "functional", Lisp/Scheme are the
languages. That doesn't mean that today's Common Lisp is the model of a
functional language, though.
Take a look at the history, necessarily abbreviated greatly: Lisp started
out in the late 1950s as a very functional language. John McCarthy
essentially borrowed 'lambda' as a keyword and then apparently reinvented
bits of lambda calculus during the initial development of Lisp - in
particular, higher-order functions, which first appeared in Lisp.
However, Lisp subsequently evolved into a much more imperative language, for
reasons of practicality and prevailing knowledge at the time. Scheme came
along in 1975 and resurrected the lambda nature of Lisp. The title of
Steele and Sussman's first Scheme paper gives a clue to this: "Scheme: An
Interpreter for Extended Lambda Calculus" (see
Although Scheme allows side effects, so does ML, albeit in a slightly more
constrained way. Unlike most other functional languages, Scheme
supports multiple coding paradigms, and functional programming is a subset
of its capabilities. However, its functional capabilities are complete -
it's not lacking anything that a functional language needs to be considered
Although Scheme can support e.g. OO or logic programming, it must be
extended to support these styles; it requires no extension to support
functional programming. Scheme code is frequently written in purely
functional style - more often than not, I think. There are a number of
purely functional Scheme libraries. Languages like Haskell were influenced
> In any case, it's an unfortunate association, as calling Lisp
> functional is unfair to both Lisp and functional programming!
You might as well say that it's unfair to Lisp that Common Lisp be called a