(cons 'CLISP '(and SDRAW))
Ich habe vor ein paar Tagen angefangen, Common Lisp zu lernen. Als Einstieg lese ich zur Zeit das Buch A Gentle Introduction to Symbolic Computation von David S. Touretzky. Das Buch wird leider nicht mehr gedruckt, aber man kann es als eBook herunterladen.
Mittlerweile auf Seite 177 angekommen, werden neue (makro)-Funktionen für Listenmanipulation vorgestellt. Um dies noch zu vereinfachen, hat Touretzky ein kleines Lisp-Programm geschrieben, mit dem man die internen Vorgänge beim Evaluieren grafisch als Zellen-Diagramm
anzeigen lassen kann.
Das Programm muss nur compiliert werden, danach kann mit einem Aufruf von (sdraw <beliebige Listenformation>) die ASCII-Grafik erzeugt werden. Es gibt auch einen interaktiven Modus mit (sdraw-loop):
(list '(a b) 'c)
[*|*]------------------>[*|*]--->NIL
| |
v v
[*|*]--->[*|*]--->NIL C
| |
v v
A B
Result: ((A B) C)
Das Programm ist verdammt praktisch zum Verstehen der Vorgänge; wieso zum Beispiel (append '(a b) 'c) zu (A B . C) und nicht zu (A B C) wird:
(append '(a b) 'c)
[*|*]--->[*|*]--->C
| |
v v
A B
Result: (A B . C)