doppelt
, die eine Prozedur mit einem Argument als Argument hat und eine Prozedur als Ergebnis liefertm die die ursprüngliche Prozedur zweimal anwendet. Wenn zum Beispiel inc
eine Prozedur ist, die 1 zu ihrem Argument addiert, dann sollte (doppelt inc)
eine Prozedur sein, die 2 addiert. Welcher Wert wird geliefert von (((doppelt (doppelt doppelt)) inc) 5)
car
-Teil plus die Anzahl im cdr
-Teil plus eins für das aktuelle Paar." So schreibt Ben folgende Prozedur:(define (paar-zaehler x)
(if (not (pair? x))
0
(+ (paar-zaehler (car x))
(paar-zaehler (cdr x))
1)))
Zeigen Sie, daß diese Prozedur nicht korrekt ist. Zeichnen Sie insbesondere Kasten-Zeiger-Diagramme für Listenstrukturen, die aus genau drei Paaren bestehen, für die Bens Prozedur jedoch als Ergebnis 3, 4, 7 bzw. gar kein Ergebnis liefert.