Definiere eine Funktion sum2() als restrekursive
Variante der Funktion sum() aus dem 4. Übungsblatt.
Eine Funktion heißt restrekursiv, wenn das Ergebnis
(i.e. der Rückgabewert) des rekursiven Aufrufs nicht in
eine weitere Berechnung eingeht, also nicht als Argument in
eine andere Funktion eingesetzt ist.
Hinweis:
Zum Problem der Umwandlung einer rekursiven Funktion in eine
restrekursive Variante siehe das Beispiel in den Folienkopien
vom 11-DEZ-97.
Auswertungsstrategie (2 Punkte)
Definiere eine Funktion, die zeigt, daß der Rumpf einer
Funktionsdefinition zur Definitionszeit (also während der
Auswertung des defun()) nicht evaluiert wird.
Bindungsumgebungen (2 + 2 + 2 + 2 Punkte)
Gegeben seien folgende globale Variablen und
Funktionsdefinition:
Erkläre die Ausgaben, die bei der Auswertung von
`(verwirrung 42)' entstehen. Gib Symboltabellen für
alle Ausdrücke an, die neue Bindungsumgebungen erzeugen.
Rekursion (2 + 3 Punkte)
Definiere eine zweistellige rekursive Funktion remove1(),
die sich analog zur Common-Lisp Funktion remove()
verhält, e.g.
? (remove1 'b '(a b c (a b) b)) (A C (A B))
Finde die entsprechende restrekursive Variante remove2().