Вопрос
Я определил процедуру 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 аргументом, тогда вы сможете применять ее повторно.
Не связан с StackOverflow