0

2つのパラメーターを持つ別のプロシージャを返すようにSchemeプロシージャを定義しました。

(define (smooth f)
  (λ(x dx)(/ (+ (f (- x dx))
             (f x)
             (f (+ x dx)))
          3.0)))

2つの引数10と0.0001を使用してsinプロシージャを使用してこのプロシージャを実行すると、問題ありません。

  ((smooth sin) 10 0.0001) ==> -0.544021109075966

この手順を再帰的に実行すると、エラーが発生します

((smooth (smooth sin)) 10 0.0001)
==> procedure expects 2 arguments, given 1: #<promise:temp6>

それで、誰かが私の問題がどこにあるか教えてもらえますか?前もって感謝します !!!

PS:これはSICPの演習1.44の一部です

4

1 に答える 1

2

それは非常に単純です。結果は(smooth sin)、外側の SMOOTH で F になる 2 引数のプロシージャであり、F は 1 つの値だけに適用されます。

解決策は、代わりに SMOOTH の結果を 1 引数のプロシージャにすることです。そうすれば、繰り返し適用できます。

于 2010-03-31T08:46:36.633 に答える