2012-03-12 60 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

相關問題