2012-03-12 89 views
0

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

我收到此错误:

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

是什么在绑定列表中没有因为我还没有使用它。我试图循环列出每辆车的列表。任何想法,为什么我得到这个错误?

回答

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)) 
) 
) 
+0

哦哇,我真的很感谢你指出错误!这种语言很难学,因为它与其他语言有很大的不同。 – Andy 2012-03-12 06:10:56

+0

我真的非常感谢你,因为我不知道如何运行多种表单,因为我认为错误来自哪里,但我不认为Lisp提供了它。我非常感谢。它会帮助我完成作业。干杯! – Andy 2012-03-12 06:25:25

+0

所有PROGN,PROG1和PROG2(偶尔)都是有用的。尽管我发现我使用PROGN和PROG1比我使用PROG2更多。 – Vatine 2012-03-12 11:23:57

相关问题