Übungsblatt 6 - Aufgabe 20

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Übungsblatt 6 - Aufgabe 20
H!

Ich habe ein kleines Verständnisproblem bei dem new-if und dem Teilausdruck (if (= 5 7) (if (= 3 1) 17 13) (if (= 7 0) (1) 21))

Warum bricht der mit new-if mit der Fehlermeldung ab, dass (1) keine gültige Funktion ist? Nach der Definition von new-if müsste die entsprechende Umschreibung durch cond doch folgendermaßen lauten:

(cond ((= 7 0) (1)) (else 21))

Der Ausdruck alleine wird auch ohne Probleme ausgewertet. (= 7 0) ergibt #f und daher springt cond in den else-Fall und gibt 21 zurück.

Aber bei Verwendung von new-if klappt das eben nicht.

Nochmal der Code des new-if zur Erinnerung:

(define (new-if condition? then-clause else-clause) (cond (condition? then-clause) (else else-clause)))

Wo ist mein Denkfehler bei der Aufgabe und warum versucht der Interpreter (1) überhaupt auszuwerten?

Aqua


Hmmm vielleicht macht der Interpreter ja einen call-by-value … wobei mir das gerade mal etwas unlogisch erscheint.


Applikative Auswertung → Parameter werden (ausser bei Spezialformen) zuerst ausgewertet.
Da new-if im Gegensatz zu if keine Spezialform ist, werden zuerst alle Parameter ausgewertet, bevor er zu dem cond-Ausdruck kommt.