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