在下面的代码中,我试图了解变量如何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)
Run Code Online (Sandbox Code Playgroud)
该average-damp过程将过程作为其参数,并返回过程作为其值.当给定一个带有一个参数的过程时,average-damp返回另一个过程,该过程计算在将原始函数f应用于其参数之前和之后的值的平均值.它在fixed-point应用返回函数的过程中(迭代地).
所以,average-damp过程不执行任何(/ x y)或(average(f whatami) whatami)所有,它只是使用传递给它的函数来创建它返回一个新的功能.