注意学习Lisp
我收到此错误:
Illegal argument in functor position: (EVALEXP (CDR MAIN-LIST) BIND-LIST)
in ((EVALEXP(CDR MAIN-LIST) BIND-LIST))
来自:
(defun evalexp (main-list bind-list)
(if (eq nil (cdr main-list))
( (if (eq nil (atom (car main-list))) (evalexp (car main-list) bind-list) ) )
( (print (car main-list))
(evalexp (cdr main-list) bind-list) )
)
主列表包含此列表:
(and 1 (or a b))
bind-list中的内容无关紧要,因为我还没有使用它。我试图循环打印出每辆车的清单。我有什么想法得到这个错误?
答案 0 :(得分:2)
额外的括号。
通常,左括号后面的第一件事是函数名。在某些情况下,你有另一个左括号,这是一个语法错误,如你所见。
您似乎也想要一个语句块。 progn
通常符合要求。你可以使用一个块作为内部if
,但它实际上没有必要,因为它只包含一个语句。
(defun evalexp (main-list bind-list)
(if (eq nil (cdr main-list))
(if (eq nil (atom (car main-list))) (evalexp (car main-list) bind-list) )
(progn
(print (car main-list))
(evalexp (cdr main-list) bind-list) )
)
)