Хитрый вопрос, но, наконец, выяснил это. Проблема в том, что #'
в определении avg-dump заставляет компилятор компилировать лямбда-функцию в момент времени , когда сама avg-dump компилируется , до того, как станет известно фактическое значение f. Вам нужно отложить компиляцию этой функции на более поздний момент времени, , когда avg-dump называется , например:
(defun avg-damp (f)
`(lambda(x) (/ (+ (funcall ,f x) x) 2.0)))
(funcall (avg-damp #'(lambda(v) (* v v))) 10)
Обратное цитирование делает свое дело.
Редактировать : Конечно, вся проблема исчезнет, если вы определите среднюю влажность в неторопливой форме, например:
(defun avg-damp (f x)
(/ (+ (funcall f x) x) 2.0))
(funcall 'avg-damp #'(lambda(v) (* v v)) 10)
Но я думаю, у вас есть причины не делать этого.