Вопрос

Я определил процедуру Scheme для возврата другой процедуры с двумя параметрами:

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

если я запущу эту процедуру с процедурой sin с двумя аргументами 10 и 0,0001, тогда все в порядке

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

если я запущу эту процедуру рекурсивно, то возникнет ошибка

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

Так может ли кто-нибудь сказать мне, в чем моя проблема?Заранее спасибо !!!

PS: это отдельно от упражнения 1.44 в SICP.

Это было полезно?

Решение

Это довольно просто, результат (smooth sin) это процедура с двумя аргументами, которая становится F во внешнем SMOOTH, и F применяется только к одному значению.

Решение состоит в том, чтобы вместо этого сделать результат SMOOTH процедурой с 1 аргументом, тогда вы сможете применять ее повторно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top