我正在阅读 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
都会调用。
我的理解有什么问题?我将不胜感激任何反馈,谢谢!