Aaron Fischer Ingenieur, Vater, Heimwerker, Problemlöser

09 August, 2007

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

lambda

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)