From: Hallvard Tr{tteberg
Subject: learning lisp
Date: 
Message-ID: <HALTRAET.92Oct20160558@monsun.si.no>
Hi Lispers,

Several people have written about how easy it is to learn Lisp. I
agree, it is very easy to start writing small functions and programs.
However, since Lisp gives you so much freedom, it is difficult to
master the Lisp style of writing. Perhaps we don't even agree on what
is good Lisp style. BTW, I wonder if good Common Lisp style is
different from older LM Lisps (Interlisp, Zetalisp)? Anyway, I think
the learning curve is different for Lisp than C. It's smooth and goes
straight to the sky. 

Lisp learning, step by step:

 1) Lisp has lot of parenthesis!
 2) Consing is great! (cons)
 3) Now I can do recursion without getting pointer errors.
   3) Now I can do recursion without getting pointer errors.
     3) Now I can do recursion without getting pointer errors.
       3) Now I can do recursion without getting pointer errors.
Break.
 4) Now I can stop the recursion without break.
 5) Consing is bad?   (append)
 6) Not consing is even worse! (Destructive operations kills)

 7) Variables are great (setq)
 7.5) Why do I get <13 undeclared free variables, while compiling foo>?
 8) Symbols are great! (set)
 9) Plists are great! (get, put)
10) Plists are not that great (he get'ed my put instead of his own)

11) Eval is great! (eval symbol)
12) Lisp is slow :-(

13) Now I can program Lisp, because I can make big Lisp programs!
14) No you can't, because you can't make them small.

15) Macros are great! (Now I've written my first macro on my own.)
16) Eh...why do I get <unbound variable> when compiling?
17) Now I understand the evaluation rules of macros.
18) Backquote is great!
19) I thought I understood backquote?
20) Now I've reimplemented my first macro as a function.

21) Closures are great!
22) Wow, can you return them too?
23) Lazy streams are great.

24) Structures are great!
25) CLOS is great!
26) How can I funcall a generic function?
27) Before and After methods are great!
28) Around methods are great!
29) How does method combination really work?
30) Ah, that's why it's so slow!
31) Is there a good c++ cross compiler?
...
63) Readtables are great!
64) Why doesn't the Listener react?
...
96) I looked at a Lisp program my friend wrote yesterday and got sick.
97) I looked at an old Lisp program of mine yesterday and got sick.
...
151) Now I never use eval.
...
173) CLIM is great!
174) CLIM IS great!
175) When does the next version for MCL 2.0 final come?

OK, I got carried way, but I hope you've understood what I meant. When
you think you can program Lisp you're a very dangerous programmer.
Unless you can program Lisp.
--
Hallvard Traetteberg
Dept. of Knowledge Based Systems
Center for Industrial Research
Box 124 Blindern, 0314 Oslo 3
NORWAY

Tlf: +47 2 45 29 83 or  +47 2 45 20 10
Fax: +47 2 45 20 40
Email: ···················@si.no