Tôi đang đọc phần sau của SICPCâu hỏi về SICP chpt 4.1: Làm thế nào (phân tích expr) giúp tăng tốc độ eval?
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_sec_4.1.7
Theo văn bản, việc chuyển đổi sau đây của eval
sẽ cải thiện cung cấp một cải thiện hiệu suất, vì một biểu thức được đánh giá nhiều lần sẽ chỉ được phân tích một lần ?
(define (eval exp env)
((analyze exp) env))
Dưới đây là một chức năng analyze
đưa ra trong cuốn sách:
(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)))))
Tôi không hiểu tại sao cuốn sách nói rằng analyze
sẽ chỉ chạy một lần. Không phải nội dung của eval
, là ((analyze exp) env))
về cơ bản nói rằng mỗi lần eval
được gọi, analyze
sẽ được gọi với thông số exp
? Điều này có nghĩa là analyze
sẽ được gọi mỗi khi eval
được gọi.
Tôi hiểu gì? Tôi sẽ đánh giá cao bất kỳ phản hồi nào, cảm ơn!