list应该是lambda表达式

时间:2012-09-24 08:59:48

标签: lambda lisp

我刚刚开始学习LISP,我只是想了解它的逻辑,但是我遇到了一个错误,我找不到解决方案..我很确定这是因为我'在某处误用了括号,或者我一般误用了一个函数,但我现在已经盯着它看了一个小时并没有取得任何进展!

(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

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

如果你想编程,你需要学习编程语言的语法。

请参阅Common Lisp Hyperspec获取Common Lisp语法。 Common Lisp的每个函数/宏/特殊操作符/ ...在Common Lisp Hyperspec中用其语法描述。

请参阅LET,IF的语法。

LET需要一个绑定列表。

IFSETF是表单。周围需要括号。

NOT只接受一个参数。