Отладка простых функций LISP.
Я очень новичок в этом, и мне трудно даже намочить ноги. Я уверен, что однажды у меня работает несколько функций, я смогу использовать их и работать над функциями более высокого порядка и более сложными задачами.
Может кто-то указать на мои ошибки в следующем коде.
(defun indeHelper(A L N)
(cond (Null N) nil)
((= A (first L) (cons N (indeHelper A (rest L) (+ 1 N)))))
(t (indeHelper A (rest L) (+ 1 N))))
(defun inde(A L)
(funcall indeHelper(A L 1)))
И как бы я это назвал? У меня есть одна функция, которая, я думаю, работает нормально, но я не могу получить синтаксис для ее вызова. Спасибо за любую помощь.
1 ответ
У вас есть ряд синтаксических проблем.
Синтаксис COND
является:
(cond (test1 body1...)
(test2 body2...)
...)
Ваш test1
должен быть (null n)
, а также body1
должно быть nil
, но вы не заключили их в скобки. Тогда ваши другие тесты и тела снаружи cond
, как должно быть видно из отступа.
Так должно быть:
(defun indeHelper(A L N)
(cond ((Null N) nil)
((= A (first L) (cons N (indeHelper A (rest L) (+ 1 N)))))
(t (indeHelper A (rest L) (+ 1 N)))))
Во второй функции вам не нужно использовать funcall
, Это используется, когда вы вызываете динамически определяемую функцию (например, при написании функций более высокого порядка), но вы просто вызываете известную функцию. Это должно быть просто:
(defun inde(A L)
(indeHelper A L 1))
Если вам нужно использовать funcall
синтаксис:
(funcall someVariable A L 1)
Когда используешь funcall
аргументы не заносятся во вложенный список, это просто обычные аргументы funcall
,