Grundkurs Common-Lisp WS 96|97

9. Übung (22-jan-98)



Gleichheitsprädikate (6 Punkte)

Schreibe eine eigene (rekursive) Funktion equal2(), die sich analog zum vordefinierten equal() verhält (i.e. Strukturgleichheit von Listen testet, aber auch Strings, Zahlen und Symbole miteinander vergleichen kann), dieses aber nicht verwendet. Verwende passende Typprädikate, um die Typen der Eingabeparameter zu bestimmen, und geeignete Gleichheitstests.



Kästchenschreibweise und dotted pairs (6 Punkte)

Stelle die einzelnen cons-Zellen der Liste (a ((b (nil)) d (e))) in den folgenden Repräsentationen dar:
a)
als Common-Lisp Asdruck, der einzig die Funktion cons() (mehrfach), die Symbole a bis d und die leere Liste nil verwendet;
b)
in der im Vorlesungsskript vorgestellten Kästchenschreibe;
c)
als Folge gepunkteter Paar (dotted pairs);



Makros (12 Punkte)

Die vordefinierten special forms push() und pop() dienen zur Handhabung sogenannter Kellerspeicher ( stacks), e.g.

? (defparameter *stack* '(2 3 4)) foo
? *stack* (2 3 4)
? (push 1 *stack*) (1 2 3 4)
? *stack* (1 2 3 4)
? (pop *stack*) 1
? *stack* (2 3 4)

Probiere push() und pop() als normale Funktionen zu definieren; erkläre, warum das nicht funktionieren kann.
Hinweis: push() und pop() haben einen sogenannten Seiteneffekt: sie verändern den Wert des Kellerspeichers dauerhaft (siehe Beispiele).



Abgabetermin ist der 29-jan-98

lisp-aufgaben@coli.uni-sb.de