我尝试了以下来自SICP的高阶函数:
(defun average-damp(f)
(lambda (x) (average x (f x))))
(defun average(x y)
(/ (+ x y) 2.0))
(defun square(x)
(* x x))
((average-damp square) 10)
即,给定函数f,我们考虑其值为x的函数等于x和f(x)的平均值。
但是运行它会报告错误:
progn: Invalid function: (average-damp square)
我确认square
和average
正常工作。这是Scheme中的原始版本average-damp
:
(define (average-damp f)
(lambda (x) (average x (f x))))
怎么了?
您似乎正在寻找apply
或funcall
。它们具有相似的功能,但接受其参数的方式不同。
(funcall (average-damp square) 10)
另请参阅https://www.gnu.org/software/emacs/manual/html_node/elisp/Calling-Functions.html