1

LISP の学習を始めたばかりで、そのロジックについて頭を悩ませているところですが、解決策が見つからないエラーが発生しました。かっこがどこかにあるか、関数を一般的に誤用しましたが、1 時間じっと見つめていて、何の進歩もありません!

(defun not-touching (pos player move)
   (let (legal? t)
    if ((not (eq (member move '(0 1 2 3 4 7 8 11 12 13 14 15)) nil))
        (mapcar #'(lambda(x) (if (not (member move x) nil)
                                (cond ((and (eq (nth (- (position move x) 1) x) nil)
                                        (not (eq (nth (+ (position move x) 1) x) player))) t)   
                                    ((and (not (eq (nth (- (position move x) 1) x) player))
                                        (not (eq (nth (+ (position move x) 1) x) player))) t)
                                    ((and (not (eq (nth (- (position move x) 1) x) player))
                                        (eq (nth (+ (position move x) 1) x) nil)) t)
                                    (t setf legal? nil))
                                nil)) *outside-lines*))
    legal?))

そして、私が得ているエラーは次のようになります:

SYSTEM::%EXPAND-FORM: (NOT (EQ (MEMBER MOVE '(0 1 2 3 4 7 8 11 12 13 14 15)) NIL)) should be
  a lambda expression

どんな助けでも大歓迎です!

4

1 に答える 1

3

プログラミングしたい場合は、プログラミング言語の構文を学ぶ必要があります。

Common Lisp構文については、CommonLispHyperspecを参照してください。CommonLispの各関数/マクロ/特殊演算子/...は、CommonLispHyperspecでその構文とともに説明されています。

LET、IFの構文を参照してください。

LETバインディングのリストが必要です。

IFSETFはフォームです。その周りに括弧が必要です。

NOT引数は1つだけです。

于 2012-09-24T09:14:19.253 に答える