Grundkurs Common-Lisp WS 96|97

8. Übung (15-jan-98)

Parameterübergabe (5 Punkte)

Gegeben sei folgendes Programm:
(defvar a 42)
(defun hmmh (a &optional b 
               &rest c 
               &key (d a) (e 'a) (f :a)) ...)
Beschreibe und erkläre, wie die Parameter `a' - `f' bei den folgenden Aufrufen von hmmh() gebunden werden:
? (hmmh 1 2)
? (hmmh 1 2 :d :a)
? (hmmh 1 2 :d a)
? (hmmh a :a :e :f :d :c)



Mapping (4 Punkte)

 

Schreibe Deine eigene mapcar()-Funktion. Als Argumente soll sie eine Funktion und ine Liste nehmen (also (defun mapcar2 (fn liste) ...)).



Kästchenschreibweise und dotted pairs (6 Punkte)

Stelle die einzelnen cons-Zellen der Liste (a (b c) d) 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;

Hinweis: Der Ausdruck (cons a nil) entspricht dem dotted pair (a . nil) sowohl als der Liste (a).



Iteration (5 Punkte)

Die Universität des Saarlandes muß (schon wieder) sparen: beim Vervielfältigen des Übungsblattes konnten nur die wichtigsten Teile der iterativen Variante remove3() (Funktionsweise wie gehabt) gedruckt werden. Setze die fehlenden Ausdrücke ein und erprobe das Ergebnis.

(defun remove3 (element list)
  (do ((foo (rest list) __________)
       (result (if ____________________________
                 nil
                 (list (first list)))
               (if (equal (first foo) element)
                 result
                 _________________________)))
      (__________ (reverse result))))



Schmöking (5 Punkte)

Erweitere die Funktion in Übung 2 so, daß eine beliebige Anzahl von Listen zugelassen wird; benutze nicht die vordefinierten Map-Funktionen. Hint: (defun mapcar3 (fn list &rest lists) ...).



Abgabetermin ist der 22-jan-98

lisp-aufgaben@coli.uni-sb.de