2

在下面的代码中,我试图了解变量如何whatami获取其值。在遵循逻辑时,我看到过程(lambda (y) (/ x y))是我传递给方法的参数average-damp,并且在该方法中表示为变量f。似乎需要执行,但我无法弄清楚执行的顺序(/ x y)(average (f whatami) whatami)任何帮助表示赞赏。

(define (average x y)
  (/ (+ x y) 2))

(define (fixed-point f start)
  (define tolerance 0.00001)
  (define (close-enuf? u v)
    (< (abs (- u v)) tolerance))
  (define (iter old new)
    (if (close-enuf? old new)
        new
        (iter new (f new))))
  (iter start (f start)))

(define average-damp
  (lambda (f)
    (lambda (whatami) (average (f whatami) whatami))))

; square root with average damping
(define (_sqrt x)
  (fixed-point
   (average-damp (lambda (y) (/ x y)))
   1))

(_sqrt 4.0)
4

1 回答 1

5

average-damp过程将一个过程作为其参数并返回一个过程作为其值。当给定一个接受一个参数的过程时,返回另一个过程,该过程计算将原始函数应用于其参数average-damp之前和之后的值的平均值。f它在fixed-point应用返回函数的过程中(迭代地)。

所以这个average-damp过程既不执行也不执行(/ x y)(average(f whatami) whatami)它只是使用传递给它的函数来创建一个它返回的新函数。

于 2011-07-11T03:39:02.493 回答