Возврат функции в качестве аргумента в примере SICP Average-Dump - PullRequest
0 голосов
/ 01 ноября 2019

Я попробовал следующую функцию высшего порядка из 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 работают правильно. Вот оригинальная версия average-damp на схеме:

(define (average-damp f)
  (lambda (x) (average x (f x))))

В чем проблема?

1 Ответ

1 голос
/ 01 ноября 2019

Вы, похоже, ищете apply или funcall. Они имеют схожую функциональность, но по-разному принимают их аргументы.

(funcall (average-damp square) 10)

См. Также https://www.gnu.org/software/emacs/manual/html_node/elisp/Calling-Functions.html

...