我可能只是不理解Lisp的范围,但是我很难理解这个井字游戏中发生了什么,我已经简要介绍了这个问题:
(defun tic-tac-toe ()
(let ((board '((- - -) (- - -) (- - -))))
(draw-board board)
(format t "~%")
(make-move board)
(draw-board board)))
(defun draw-board (board)
(dolist (row board)
(apply #'format (cons t (cons "~A ~A ~A~%" row)))))
(defun make-move (board)
(setf (caar board) 'x))
tic-tac-toe
函数旨在成为主要入口点,每次运行时,游戏都应该从头开始。但是,看看当我在CLISP中运行它时会发生什么:
[2]> (tic-tac-toe)
- - -
- - -
- - -
X - -
- - -
- - -
NIL
[3]> (tic-tac-toe)
X - -
- - -
- - -
X - -
- - -
- - -
NIL
第一次,电路板开始空白(所有破折号),但在此之后,电路板始终以剩余的旧值开始。这是怎么回事? let
每次都不应该重新初始化董事会吗?