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プロシージャは、引数としてプロシージャを取り、その値としてプロシージャを返します。1つの引数を取るプロシージャが与えられると、元の関数を引数average-dampに適用する前後の値の平均を計算する別のプロシージャを返します。これは、返された関数が(繰り返し)適用されるプロシージャf内にあります。fixed-point

したがって、average-dampプロシージャは実行されないか、まったく実行されません(/ x y)(average(f whatami) whatami)渡された関数を使用して、返される新しい関数を作成するだけです。

于 2011-07-11T03:39:02.493 に答える