Grundkurs Common-Lisp WS 96|97

2. Übung (6-nov-1997)



Variablenbindung und Auswertung (4 Punkte)

Was kann getan werden, damit die folgenden Ausdrücke jeweils zu 13 evaluieren?
a)
a
b)
(* a b)
c)
(length c)
d)
(length (nthcdr 2 (reverse c)))



Quotierung (4 Punkte)

Bestimme die Ergebnisse aus der Auswertung der folgenden Ausdrücke und erkläre sie.
a)
(length "foo bar baz")
b)
(length (quote "foo bar baz"))
c)
(length (quote (quote "foo bar baz")))
d)
(length '(quote "foo bar baz"))



Listenzugriff (8 Punkte)

Sei das Symbol *foo* gebunden an eine beliebig lange Liste (e.g. (a b c ... x y z)).
a)
Formuliere einen Ausdruck, der auf das vorletzte Element von *foo* zugreift.
(Für weitere grundsätzlich verschiedene Ausdrücke mit dem gleichen Effekt gibt es jeweils zwei Extrapunkte.)
b)
Schreibe eine einstellige Funktion vorletztes(), die den Listenzugriff aus Aufgabe a) für beliebige Listen, die als Funktionsargument übergeben werden, berechnet.
Hinweis: in der Schreibe `foo()' gehören die runden Klammern nicht zum eigentlichen Funktionsnamen, sondern zeigen an, daß das Symbol `foo' als Funktionsname verwendet wird.



Ein Prädikat (4 Punkte)

Schreibe ein einstelliges Prädikat palindromp(), das sein Argument daraufhin überprüft, ob es eine Liste ist, die von rechts und von links gelesen gleich ist.
Hinweis: in der Schreibe ` palindromp()' gehören die Klammern nicht zum eigentlichen Namen, sondern zeigen an, daß das Symbol ` palindromp' als Funktionsname benutzt wird.
? (palindromp '(A b l e w a s I e r e I s a w E l b a))
t


Schmökaufgabe: set() (3 Schmökpunkte)

Gegeben folgende Aufrufe

? (set 'a 'b)
? (set 'b 'c)
? (set b a)

Spezifiziere und erkläre die Werte für a, b und c.



Abgabetermin ist der 13-nov-1997

lisp-aufgaben@coli.uni-sb.de