如何在列表中放置元素?(口齿不清)

Joa*_*sta -2 lisp common-lisp

(defun tictactoe3d ()
'(
 ((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 NIL NIL))
))
Run Code Online (Sandbox Code Playgroud)

我需要一个能在NIL的位置添加X或O的函数,我需要该函数来询问用户他想要放置它的位置.棋盘游戏是一个tic tac toe 3D(3个板块,1,2个位置,而不是9个).第一行是1级(它基本上与具有9个位置的一个tic tac toe相同).如何将元素添加到这样的列表中.我知道我必须验证一个位置是否为零.

cor*_*ump 7

您返回的列表是常量.你不能改变常量,因为它有不确定的后果.如果要使用纯功能数据结构,可以定义返回电路板修改副本的操作.

您正在使用我认为您应该使用数组的列表:毕竟,一块板实际上是一个固定大小的网格.这是你如何分配它:

(make-array '(3 3 3) :initial-element nil)

=> #3A(((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 nil nil)))
Run Code Online (Sandbox Code Playgroud)

然后,你使用aref(setf aref):

(setf (aref board z y x) value)
Run Code Online (Sandbox Code Playgroud)