Отладка простых функций 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,

Другие вопросы по тегам