I'm a Common Lisp programmer, and am beginning to get tired of phrases like "But while Racket retains the functional goodness of Lisp, ...". It's becoming increasingly dishonest to peddle Lisp as a functional language that stands in contrast to, say, Ruby or Python or what have you. Yes, Lisp has very functional roots. But that was fifty years ago. The Lisp of the past two or three decades is fully multi-paradigmatic. It supports a functional style, but it supports other styles (object-oriented, imperative, ...) just as well if not better. Haskell is functional. ML is functional. Heck, Clojure is functional. If my only attraction to Lisp was FP I'd be using one of those languages instead.
That said, lest I be perceived as too negative, I am very excited that this book is being published. Racket has always stricken me as very clean and friendly (two adjectives less applicable to CL), and advancing Lisp enthusiasm in any form is never a bad thing. Cheers!
It's not incorrect, just misleading. If I made a Python descendant named Monty and said, "Monty retains the functional goodness of Python", wouldn't you give me flack since that's not the main point of Python?
What if I said C++ retained the imperative goodness of C?
In Scheme and Racket it's more idiomatic to use the functional version. It isn't enforced by the language. For example you can use imperative code locally but usually try to enclose that in an apparent functional procedure.
In particular, a few years ago the Racket team made many structures immutable, to promote functional code and enable some optimizations. The language has the mutable versions, so you can use them if you like.
Aren't you conflating "Lisp" with "Common Lisp" here?I suspect this, because I was told that for CL users the word "Lisp" means their particular Lisp incarnation. For the rest of the world - at least in those parts of the world where people speak Scheme or Clojure or newLisp or Shen or... - the word "Lisp" means "a family of languages, descendants of John McCarthy's 'original' one with this original included".
So your objection is unfounded - CL is not primarily FP oriented, but it was not CL that the author of the quote meant when writing the word "Lisp".
To a degree, yes. But that's because CL is roughly speaking the set union of all Lisps available in the '80s. Scheme was off doing its own thing, and knew it.
Even today, languages make it clear where they're coming from. The claim to fame of Clojure is that it's a) a Lisp that b) uses FP to make many things easier, notably but not exclusively concurrency (and, as a result of the FP focus, a big difference between Clojure and other Lisps is that by default it uses immutable data structures) and c) runs on the JVM.
Note that the emphasis on FP is something Clojurians use to draw in Lispers from other dialects. Similar arguments could be made for Shen, Qi, etc.
The unique selling proposition of Lisp as a whole is that it's homoiconicity lets you treat code as data and exploit that using macros and such. Racket illustrates this beautifully--from what I've seen it's common for a library to introduce new syntax and such. The unique selling proposition of Lisp is not that it's darn good at functional programming--that's just a very fortunate side-effect.
Not really, Interlisp for example looks very different from Common Lisp. Standard Lisp looks different. A bunch of other dialects, too. Incl. Scheme, Logo, LeLisp, ...
Common Lisp is basically a modernized version of Maclisp, integrating existing research/implementation on other Maclisp successors (NIL, Lisp Machine Lisp, ...).
That said, lest I be perceived as too negative, I am very excited that this book is being published. Racket has always stricken me as very clean and friendly (two adjectives less applicable to CL), and advancing Lisp enthusiasm in any form is never a bad thing. Cheers!