我讀SICP的以下部分關於SICP chpt 4.1的問題:(分析expr)如何幫助加速eval?
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1.7
根據課文的eval
以下改造將提高提供性能改進,因爲這被評價多次將只進行一次分析表達?
(define (eval exp env)
((analyze exp) env))
下面是書中給出的analyze
功能:
(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)))))
我不明白爲什麼書上說analyze
將只運行一次。 eval
,即((analyze exp) env))
基本上說是不是每次調用eval
,analyze
都會調用exp
作爲它的參數?這意味着每調用一次eval
就會調用analyze
。
我的理解有什麼問題?我將不勝感激任何反饋,謝謝!