我刚刚开始学习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
任何帮助将不胜感激!
答案 0 :(得分:3)
如果你想编程,你需要学习编程语言的语法。
请参阅Common Lisp Hyperspec获取Common Lisp语法。 Common Lisp的每个函数/宏/特殊操作符/ ...在Common Lisp Hyperspec中用其语法描述。
请参阅LET,IF的语法。
LET
需要一个绑定列表。
IF
,SETF
是表单。周围需要括号。
NOT
只接受一个参数。