在下面的代码中,我试图理解变量 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)
最佳答案
average-damp
过程将过程作为其参数并返回过程作为其值。当给定一个接受一个参数的过程时,average-damp
返回另一个过程,该过程计算将原始函数 f
应用于其参数之前和之后的值的平均值。它位于定点
过程中,返回的函数被应用(迭代)。
因此,average-damp
过程根本不执行 (/x y)
或 (average(f Whatami) Whatami)
,它只是使用传递给它的函数来创建它返回的新函数。
关于LISP SICP 视频讲座 2a 平均潮湿问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645428/