在第2a课中,我对(average (f x) x)感到困惑。它不可能只是(average f x)。f不是已经意味着lambda of (/ x y)吗?为什么我需要(average (f x) x)?有人能帮我解决这个问题的替代方法吗?
(define (sqrt x)
(fixed-point
(average-damp (λ (y) (/ x y)))
1))
(define average-damp
(λ (f)
(λ (x) (average (f x) x))))发布于 2014-06-09 16:59:09
这个片段:
(average (f x) x)与此不同的是:
(average (f) x)首先,f是一个需要单个参数的函数,在本例中必须是x,因此我们称之为(f x)。如果编写(f),则试图调用没有参数的f,从而导致错误。在average-damp中用f参数的值替换它之后,我们会发现它返回另一个lambda,即:
(λ (x)
(average ((λ (y) (/ x y)) x) x))如您所见,在这个表达式((λ (y) (/ x y)) x)中,x作为参数传递给(λ (y) (/ x y)) x) (即f),x绑定到y参数。别搞错了!因为现在我们有:
(/ x x)但是此时的第一个x不是变量,它是在调用sqrt时在闭包中捕获的值,而第二个x是我们刚才返回的lambda中的参数,直到调用它的点(大概在fixed-point中)为止,它仍然是未绑定的。
https://stackoverflow.com/questions/24125047
复制相似问题