Grundkurs Common-Lisp WS 96|97

7. Übung (8-jan-98)

Fehlersuche (10 Punkte)

In das Programm unter https://www.coli.uni-saarland.de/~oe/lisp/fehler.lisp haben sich 6 (in Worten sechs) dumme Fehler eingeschlichen; finde und korrigiere sie so, daß das Programm entsprechend der Kommentare in der Datei funktioniert.



Einfaches Mapping (5 Punkte)

a)
Definiere eine einstellige Funktion get-even(), die als Argument eine Liste mit Ganzzahlen nimmt und durch eine geeignete mapping-Operation (i.e. eine Kombination aus mapping- und anonymer lambda()-Funktion) alle ungeraden Zahlen n durch 2 * n ersetzt.
b)
Definiere eine einstellige Funktion eliminate-odds(), die als Argument eine Liste mit Ganzzahlen nimmt und durch eine geeignete mapping-Operation alle ungeraden Zahlen unterdrückt, e.g.
? (get-even '(1 2 3 4 5))
(2 2 6 4 10)
? (eliminate-odds '(1 2 3 4 5))
(2 4)



Iteration (5 Punkte)

Die Funktionen !() und ?() sollen jeweils iterativ die Fakultät ihrer Eingabe berechnen; erkläre, warum !() funktioniert, während ?() für alle Eingaben 0 zurückgibt.
(defun ! (n) 
  (do ((m n (- m 1))
       (k 1 (* k m)))
      ((= m 0) k)))

(defun ? (n)
  (do* ((m n (- m 1)) 
        (k 1 (* k m))) 
       ((= m 0) k)))
? (! 7)
5040
? (? 7)
0



Abgabetermin ist der 15-jan-98

lisp-aufgaben@coli.uni-sb.de