Grundkurs Common-Lisp WS 96|97

3. Übung (13-nov-1997)


Wir spielen Common-Lisp Interpreter (6 Punkte)

Was berechnen die folgenden Funktionen; wozu sind sie gut? Erkläre ihre Funktionsweise an (mindestens) je einem Beispiel.
a)
(defun ? (?)
(nth (- (length ?) 1) ?))
b)
(defun ! (!)
(append ! (reverse !)))

Hinweis: Erkläre möglichst genau die verschiedenen Verwendungen von `?' und `!' in den beiden Funktionsdefinitionen.



Listenarithmetik (3 Punkte)

Schreibe eine zweistellige Funktion where(), die als erstes Argument ein Atom und als zweites eine Liste nimmt; where() berechnet die Position des ersten Vorkommens (von links) des Atoms in der Liste, e.g.
(where 'c '(a b c d e c))
--> 2

Hinweis: Beachte, daß where() (genau wie zum Beispiel nth()) die Positionen der Elemente einer Liste ab 0 zählt (also gemäß der Informatikerzähle).



Einfache Rekursion (5 Punkte)

Schreibe eine Funktion nthcdr1(), die die n ersten Elemente einer beliebigen Liste abspaltet, und die Restliste als Wert zurückgibt; nthcdr1() verhält sich insofern genau wie die vordefinierte Funktion nthcdr().



Lebensnahe Rekursion (6 Punkte)

Schreibe eine einstellige rekursive Funktion pair-up(), die aus einer Eingabeliste eine neue Liste berechnet, in der jeweils zwei Elemente (in der ursprünglichen Reihenfolge) paarweise (i.e. als Liste mit zwei Elementen) zusammengeschlossen sind. Für Eingaben mit ungerader Elementzahl verhält sich pair-up() wie im richtigen Leben: das letzte Element bleibt übrig.
? (pair-up '(peter mary waldemar guido))
--> ((peter mary) (waldemar guido))
? (pair-up '(foo bar baz))
--> ((foo bar))
? (pair-up '())
--> nil



Abgabetermin ist der 20-nov-1997

lisp-aufgaben@coli.uni-sb.de