2012-03-12 16 views
0

学習のLispCommon 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のブロックを使用することはできますが、実際には1つのステートメントしか含まれていないため、実際には必要ありません。

(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

+0

エラーがどこから来たものかを想定していたので、複数のフォームをどのように実行するかわからなかったので、本当にありがとうございました。しかし、Lispがそれを提供したとは思いませんでした。私はそれを大いに感謝します。この宿題を完成させるのに役立ちます。乾杯! – Andy

+0

PROGN、PROG1、PROG2はすべて(時には)有用です。私はPROGNとPROG1を私がPROG2を使用する以上に使用していますが、 – Vatine

関連する問題