Я определяю функцию в LISP, и она определяет правильно. Но всякий раз, когда я пытаюсь вызвать его, я получаю сообщение об ошибке «Переменная FACTORIAL не связана».
Я пробовал это на OS X и Windows 7, на LispWorks и Allegro. Функция -
(defun factorial (x)
(if (= 1 x) 1
(* x factorial (- 1 x))))
. Любая помощь приветствуется.
В третьей строке вашего кода вы умножаете x
на факториал
на 1-x
.
Первое, на что следует обратить внимание, это то, что factorial
не является переменной: это функция. Поскольку Common-Lisp — это Lisp-2, factorial вообще не связан как переменная — он связан как функция.
Вы должны вызывать функцию factorial
на единицу меньше, чем x
, а не x
меньше единицы.
Итак:
(defun factorial (x)
(if (= 1 x) 1
(* x (factorial (- x 1)))))
…должен это сделать.
Похоже, ты пропал набор скобок:
(defun factorial (x)
(if (= 1 x) 1
(* x (factorial (- 1 x)))))
Без ()
вокруг факториала
Лисп считает, что вы имеете в виду переменную вместо функции.
Чтобы завершить ответ @Isaac Hodes, это показывает вам, что в CL явно есть 2 пространства имен для функции и переменной. У вас не было бы такой же ошибки, если бы вы были в схеме. Вы можете прочитать больше здесь.