所以我正在使用 Lisp 制作一个相对简单的游戏。
我创建了一个具有所有 NIL 元素的指定大小的板:
(defun make-board(rows columns)
(cond ((= rows 1) (list (make-list columns)))
(t ( append (list (make-list columns)) (make-board (1- rows) columns)))))
现在我正在研究 place 函数,它将在 2D 列表的列中的第一个 NIL 元素处放置一个值:
(defun place(player column matrix)
;need some help here
;I can get the specified column, is there a better way?!
(let (col)(get-column column matrix))
)
我可以检索指定的列:
; return the given column
(defun get-column
(colnum matrix)
(mapcar (lambda (row) (nth colnum row)) matrix))
我觉得这很简单,但不幸的是 Lisp 不能很好地与我合作。我也更喜欢这种没有迭代的实现,因为这是执行 Lisp 的“正确”方式。
编辑:
为澄清起见,make-board 将返回如下内容:
(make-board 5 5)
((NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL)
(NIL NIL NIL NIL NIL))