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