我正在阅读 SICP 的以下部分
http://mitpress.mit.edu/sicp/full-text/book/book-ZH-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作为它的参数被调用吗?这意味着analyze每次调用时eval都会调用。
我的理解有什么问题?我将不胜感激任何反馈,谢谢!