Aufgabe 1.5. Ben Bitdiddle hat einen Test erfunden, um zu bestimmen, ob der Interpreter, mit dem er konfrontiert ist, die Anwendung applicative order evaluation oder normal-order evaluation verwendet. Er definiert die folgenden zwei Verfahren:SICP Übung 1.5
(define (p) (p))
(definieren (Test xy) (if (= x 0) y))
er dann das wertet Ausdruck
(Test 0 (p))
Welches Verhalten wird Ben mit einem Dolmetscher beobachten, die applicative Ordnung Auswertung verwendet? Welches Verhalten wird er mit einem Interpreter beobachten, der die Auswertung normaler Ordnung verwendet?
Ich verstehe die Antwort auf die Übung; meine Frage liegt darin, wie (p) gegen p interpretiert wird. Zum Beispiel bewirkt (Test 0 (p)), dass der Interpreter hängt (was erwartet wird), aber (Test 0 p) mit der obigen Definition wird sofort zu 0 ausgewertet. Warum?
Angenommen, wir haben die Definition in (define (p) p) geändert. Mit der angegebenen Definition (Test 0 (p)) und (Test 0 p) werden beide zu 0 ausgewertet. Warum tritt dies auf? Warum hängt der Dolmetscher nicht? Ich verwende Dr. Racket mit dem SICP-Paket.
+1 prägnante Antwort. Versuchen Sie auch http://codepad.org. –
Danke. Ich suche auch nach der Antwort. – user1166240