下面我与我的Lisp程序在列表和列表之间进行比较。一个是从用户输入生成的,另一个是预生成的表的一部分。我用设置输入单独测试功能;那么,(isValidMove '(0 0))
返回T,
尚未建立一个列表比较使用query-io我得到错误。用任何语言比较,总是给我带来麻烦,因为有多少不同的东西与我相同,但显然与计算机有很大的不同;我认为这是我在这里遇到的同样的问题。 (顺便说一下,我只包括一个更大的程序的一部分)。混淆Lisp列表比较
;Local Variables (program wide)
;Board values stores x/o and defaults to " "
(setf boardValues (make-array '(3 3)
:initial-element " ")
);end boardValues
;List of all valid moves remaining
(setf validMoves (list
(list 0 0) (list 0 1) (list 0 2)
(list 1 0) (list 1 1) (list 1 2)
(list 2 0) (list 2 1) (list 2 2)))
;Functions
;Function call the will prompt the user for input, if the move is
;not vaild, repromts for a move
(defun getUserMove()
(let ((move (read-line *query-io*)))
(if (isValidMove move)
(progn
(setf (aref validMoves (car move) (cdr move)) 'x)
(remove move validMoves))
(getUserMove)))
);end getUserMove
;Function call that process the move, returns T if move is valid
;and F if move is invalid
(defun isValidMove (move)
(dolist (m validMoves)
(if (equalp m move)
(return T)))
) ;end isValidMove
读取行返回一个字符串。看起来你正在将它与数字进行比较,而不是先转换它。 –
风格点:请不要在他们自己的路线上留下拖尾。此外,评论说明表达式的末尾是不必要的。缩进和paren匹配显示表达式。 – verdammelt
我会记住这一点。我个人觉得更难阅读,但我会适应Lisp的风格。 – Klladdy