|
Eine abstrakte Klasse SExpr für den einzigen Lisp Datentyp
mit den elementaren
Selektoren car, cdr,
der cons Operation,
den Prädikaten isList, isAtom,
isNil, isEqual
und einer Ausgabefunktion toString.
|
|
Für fast alle Operationen ist hier eine
default-Implementierung angegeben.
Für car und cdr,
die nur auf nicht atomaren Werten
zugelasen sind, werden hier Laufzeitfehler ausgelöst.
|
|
Eine SExpr ist entweder ein Atom oder ein zusammengesetzter
Wert, ein Paar, hier als Pair bezeichnet.
|
| |
|
Die abstrakte Klasse Atom für unstrukturierte, atomare
Werte. Hier wird das Prädikat isAtom redefiniert.
|
|
Der Bereich Atom wird weiter unterteilt in Symbole,
die Unterklasse Symbol,
und in Zahlen, die Unterklassen Number.
|
| |
|
Die Symbol Klasse mit redefiniertem isEqual Prädikat
und einer toString Funktion.
|
| |
|
Es gibt ein spezielles Symbol NIL. Dieses Symbol
repräsentiert sowohl den Wert false als auch die leere Liste.
Dies ist das einzige Symbol, für das isList erfüllt ist.
|
|
Von dieser Klasse Nil wird nur einmal beim Initialisieren
der Klasse SExpr ein Exemplar erzeugt.
|
| |
|
Eine Klasse für Zahlen.
Zahlen sind ebenfalls atomar. In diesem Beispiel
werden nur ganze Zahlen unterstützt.
|
| |
|
Die Pair Klasse zur Realisierung von Listen.
Eigentlich werden keine Listen implementiert, sondern
Paare, eine Liste wird aus einer Reihe von Paaren zusammengesetzt
wobei das ganz rechts stehende Element die leere Liste (NIL) ist.
|
|
In dieser Klasse werden car,
cdr,
isList, isPair und isEqual
für Listen redefiniert.
|
| |
|
Ein Testprogramm für die SExpr Klasse
|
|
|