Я решил изучить LISP сегодня и немного поиграл с ней. Я написал простую детскую функцию только для того, чтобы проверить свое понимание, и теперь понимаю, что мое понимание не понимает так сильно, как я понял это, чтобы понять. : DПростая функция LISP не работает
В любом случае, вот эта функция. Идея состоит в том, что когда она называется, например, (esexp base x), он должен вернуть базу значений x. Так (esexp 3 4) = 3^4 = 81.
(я использую реализацию CMU в Common Lisp, если это имеет значение.)
(defun esexp (base x)
(if (= x 0)
1
(if (< x 0)
(/ esexp (base (+ x 1)) base)
(* esexp (base (+ x 1)) base))))
Это не работает. Я получаю ошибки, которые выглядят (Предупреждение: эта переменная не определена: SLBEXP) и (Ошибка в KERNEL :: UNBOUND-SYMBOL-ERROR-HANDLER: переменная SLBEXP не связана). Что я делаю не так? И будет ли лучше (или более LISP-ish) писать эту функцию?
ETA
Исправленный код:
(defun esexp (base x)
(if (= x 0)
1
(if (< x 0)
(/ (esexp base (+ x 1)) base)
(* (esexp base (- x 1)) base))))
Ah duh. Благодарю. – Asker