Неверная функция Elisp - PullRequest
       7

Неверная функция Elisp

0 голосов
/ 24 апреля 2019

У меня есть следующий код:

(defun rember
    (lambda (a lat)
      (cond
       ((null lat) '())
       (else (cond
              ((eq (car lat) a) (cdr lat))
               (else (rember a
                             (cdr lat))))))))
(rember 2 '(4 5 6 7))

Когда я запускаю это с помощью C-x C-e, я получаю следующую ошибку:

Invalid function: (lambda (lambda (a lat) (cond ((null lat) (quote nil)) (else (cond\
 ((eq (car lat) a) (cdr lat)) (else (rember a (cdr lat))))))) nil)

Я не знаю почему.Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 24 апреля 2019

Похоже, вы смешиваете синтаксис Lisp и Scheme для определения функций. В Лиспе, поскольку вы используете defun вместо defvar, уже подразумевается, что вы определяете функцию, поэтому вам не нужно переносить код в lambda:

(defun rember (a lat)
  (cond
   ((null lat) '())
   (else (cond
          ((eq (car lat) a) (cdr lat))
          (else (rember a
                        (cdr lat)))))))

(Далее вы обнаружите, что else не обрабатывается специально внутри cond в Emacs Lisp, поэтому вам нужно будет использовать t вместо этого.)

...