【发布时间】:2020-03-08 16:16:08
【问题描述】:
以mean-square 定义为例:
(define (mean-square x y)
(define (square x) (* x x))
(define (average x y) (/ (+ x y) 2))
(average (square x) (square y)))
当我运行 (mean-square 2 4) 时,我正确地得到了 10。
我的问题是,内部定义(在这个玩具案例中是 square 和 average)是否运行每次我通过解释器调用 mean-square 过程?如果是这样,那不是效率低下吗?如果不是,为什么?
【问题讨论】:
-
现代编译器可以轻松处理这个问题。这是一种可能的方式:en.wikipedia.org/wiki/Lambda_lifting
-
对于这种特殊情况,许多编译器会完全内联本地函数。例如,Racket 就可以。