lese ich den folgenden Abschnitt von SICPFrage zu SICP chpt 4.1: Wie hilft (analysieren expr) helfen eval zu beschleunigen?
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1.7
den Text entsprechend, wird die folgende Transformation von eval
verbessern wird eine Leistungsverbesserung, da ein Ausdruck bietet, die nur einmal analysiert werden oft ausgewertet wird ?
(define (eval exp env)
((analyze exp) env))
Hier eine analyze
Funktion in dem Buch:
(define (analyze-if exp)
(let ((pproc (analyze (if-predicate exp)))
(cproc (analyze (if-consequent exp)))
(aproc (analyze (if-alternative exp))))
(lambda (env)
(if (true? (pproc env))
(cproc env)
(aproc env)))))
Ich verstehe nicht, warum das Buch sagt, dass analyze
nur einmal ausgeführt werden. Nicht der Körper von eval
, der ((analyze exp) env))
grundsätzlich ist, dass jedes Mal eval
heißt, wird analyze
mit exp
als Parameter aufgerufen werden? Dies würde bedeuten, dass analyze
jedes Mal aufgerufen werden würde, wenn eval
aufgerufen wird.
Was ist falsch mit meinem Verständnis? Ich würde mich über jede Rückmeldung freuen, danke!