On 1/5/2012 9:09 AM, Liam Proven wrote:
All right, some interesting points there.
But, by way of seeking clarification - well, let's put it this way. I
am interested and very curious about Lisp, Scheme, Lisp Machines and
so on. Indeed I am, as a result of my reading, trying to research and
write an article on the history of Lisp Machines.
And yet, despite reading acres about this, I have yet to find *any*
coherent nonspecialist texts, guides, tutorials or explanations about
these languages.
What texts have you looked at? "Practical Common Lisp" is fairly
decent, "Structure and Interpretation of Computer Programs"
(
http://deptinfo.unice.fr/~roy/sicp.pdf) is a great introduction.
Recently I've skimmed through "Land of Lisp" which is a fun book with a
good sense of humor that teaches Lisp by way of writing simple games.
For instance, the lambda calculus. What is it? What does it do, what
is it for, why is it special?
It's the fundamental mathematical concept behind functional programming
languages. It's by no means a prerequisite for using (or understanding)
Lisp. I'm not sure I understand it well enough to explain it
coherently, so I'll let someone else chime in here :).
Closures: again, I have yet to find a readable, comprehensible
explanation of what they are, what they are good for, why they are
powerful and what strengths they confer onto a programming language.
(Warning, huge URL, to Peter Siebel's "Practical Common Lisp")
http://books.google.com/books?id=gwyZ4jdn_jMC&pg=PA68&lpg=PA68&…
See page 68 at least.
I'd also suggest reading "Structure and Interpretation of Computer
Programs." It's Scheme-based, but most of what it's talking about
applies to Lisp as well. And it uses closures heavily as a powerful
abstraction.
If the teaching& reference materials that I have found so far are
unable to convey these core concepts, then there would seem to be two
possible conclusions:
[a] /all/ the materials that I've been able to find are extremely
poor, even the ones that are more or less universally agreed to be
very good
or
[b] these are complex, difficult concepts and a massive amount of
back-knowledge is necessary to understand it.
Or [c] you're taking the wrong approach to actually learning this. Sit
down with a copy of SICP and a computer running Scheme. Go through the
examples. Experiment. And don't worry about understanding everything
all at once.
(I'd also argue that the two items you list as "core concepts" are not
as "core" as you're making them out to be. As I've said, understanding
Lambda calculus at the mathematical level is by no means a requirement
for actually using a functional programming language. Similarly,
closures are very useful but by no means required knowledge for starting
off in Lisp.)
I would *REALLY* like and hugely value any pointers, ideally web links
but print references would do as well, as to these concepts.
But are there other possible explanations that I have missed? That
these things are easy but all the texts are rubbish?
I'm not going to say these things are easy -- programming isn't easy in
general. Learning a new programming paradigm isn't easy. Lisp and
Scheme themselves are not complicated, but there are concepts in them
that you really won't understand until you sit down and start using
them. You'll have a few "a ha!" moments, and things will start making
more sense. I'm still relatively inexperienced with Lisp. I know my
way around it, but I don't claim to be an expert, and I'm still learning
new things that make me say "a ha!"
- Josh