gpt4 book ai didi

lisp - 将项目放在二维矩阵列中的第一个 nil 元素处

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:44 25 4
gpt4 key购买 nike

所以我正在使用 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))

最佳答案

我不知道为什么递归应该是在 Lisp 中编程的“正确”方式。循环宏非常有用,使用它可以轻松实现您想要实现的功能。

(defun make-board(rows columns)
(loop repeat rows collect
(loop repeat columns collect nil)))

关于lisp - 将项目放在二维矩阵列中的第一个 nil 元素处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16000522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com