首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对已通过的过程执行的解释

对已通过的过程执行的解释
EN

Stack Overflow用户
提问于 2014-06-09 16:56:28
回答 1查看 51关注 0票数 0

在第2a课中,我对(average (f x) x)感到困惑。它不可能只是(average f x)f不是已经意味着lambda of (/ x y)吗?为什么我需要(average (f x) x)?有人能帮我解决这个问题的替代方法吗?

代码语言:javascript
复制
(define (sqrt x)
    (fixed-point
        (average-damp (λ (y) (/ x y)))
        1))

(define average-damp
    (λ (f)
        (λ (x) (average (f x) x))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-09 16:59:09

这个片段:

代码语言:javascript
复制
(average (f x) x)

与此不同的是:

代码语言:javascript
复制
(average (f) x)

首先,f是一个需要单个参数的函数,在本例中必须是x,因此我们称之为(f x)。如果编写(f),则试图调用没有参数的f,从而导致错误。在average-damp中用f参数的值替换它之后,我们会发现它返回另一个lambda,即:

代码语言:javascript
复制
(λ (x)
  (average ((λ (y) (/ x y)) x) x))

如您所见,在这个表达式((λ (y) (/ x y)) x)中,x作为参数传递给(λ (y) (/ x y)) x) (即f),x绑定到y参数。别搞错了!因为现在我们有:

代码语言:javascript
复制
(/ x x)

但是此时的第一个x不是变量,它是在调用sqrt时在闭包中捕获的值,而第二个x是我们刚才返回的lambda中的参数,直到调用它的点(大概在fixed-point中)为止,它仍然是未绑定的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24125047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档