Common Lisp中“functor中的非法参数”是什么意思?

时间:2012-03-12 05:39:54

标签: recursion common-lisp

注意学习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中的内容无关紧要,因为我还没有使用它。我试图循环打印出每辆车的清单。我有什么想法得到这个错误?

1 个答案:

答案 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) )
  )
)