[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: What's so cool about Scheme?

[Mike Newhall <mike@newhall.net>]
> >I agree with what you're getting at but would add that code-as-data
> >and dynamic features including dynamic typing are just as at home
> >with OO languages and not unique or any better suited (IFAICS) to
> >functional flavored languages like LISP.
> >
> >Cheers, Steve
> 	I agree, but actually you remind me perhaps of the label that I
> 	was looking for: "dynamic languages".  OO and dynamic are
> 	independent feature axes; in that sense of course dynamic features
> 	*are* unique to dynamic languages! :-)  However if the
> 	'functional' feature set means higher-order functions, then
> 	'dynamic' may be a requirement of being 'functional'.  Are there
> 	any languages that do *not* have dynamicism yet are considered
> 	functional?

I strongly agree that "functional" is not a good label for
Lisp/Scheme. In fact, I had rather thought this was common
knowledge... ;)

I've heard Lisp/Scheme referred to as "mostly-functional," which I
think is reasonable from a functional programmer's point of view, but
not really fair to Lisp: to an OO programmer, Lisp/Scheme are just as
well "mostly-OO," but that doesn't give a complete account either.
And in any case, they're not even as "mostly-functional" as languages
like ML.

I strongly prefer the labels: dynamic languages, symbolic languages,
or simply Lispy languages... I'm sure there are others.

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...

What I think of as traditional functional languages have various
feature-sets, but they all have one overriding theme: functions are
the basic program unit, and functions are defined in a rather strict
sense as mappings with NO SIDE EFFECTS WHATSOEVER. So in some sense,
the grand narrative of functional programming languages has been the
search for some abstraction to manage the necessary side effects of
real programming. Different languages have had different answers, the
most common being compromise (the ML-variants, and I believe Miranda
also) but others being uniqueness types or linear types, and in
Haskell, monads.

As for whether Haskell fans consider laziness crucial to a functional
language, you might be surprised to find that not all of them do. In
particular, Simon Peyton Jones doesn't seem to find laziness essential
(see http://www.research.microsoft.com/~simonpj/papers/haskell-retrospective/index.htm).
What he thinks IS essential, as I've said, is being "purely
functional," and he argues that the biggest benefit of sticking to
laziness was that it forced them to stick to their pure functional
guns, even when the going was very tough.

In short, I don't think that "dynamic" features a la
Lisp/Scheme/Smalltalk are necessary for functional languages at all.
In fact, I think most functional languages lack them. And, in
conclusion, if we could agree to cease the unhappy practice of calling
Lisp and Scheme "functional languages," I think the world would be a 
better and more communicative place... :)


Matt Hellige                  matt@immute.net