【发布时间】:2013-12-16 06:01:01
【问题描述】:
我正在尝试创建数组中第一个元素的副本并将副本添加到数组的末尾。然后我想对刚刚创建的副本进行工作(move_NE),更改它而不是原始副本。预期的结果是有一个包含两个元素的数组,一个指向原始元素,另一个指向修改后的原始元素。
(vector-push-extend (initialize_board 5) *all_states*)
(vector-push-extend (elt *all_states* 0) *all_states*)
(move_NE (elt *all_states* 1) 0 2)
据我所知, (elt *all_states* 0) 正在生成对原始元素的引用,这会产生一个包含两个元素的数组,这两个元素都指向同一事物。
这个程序的上下文来自于我尝试编写一个程序来生成三角形钉子纸牌(饼干桶)游戏的所有可能动作。 *all_states* 是一个棋盘状态数组,每个棋盘状态都是一个二维数组。
感谢任何帮助。
编辑:我的背景是 C/C++ 编程。
【问题讨论】:
-
(elt *all_states* n)返回索引n处的数组元素。如果您想在其他地方存储副本,则需要自己制作副本,然后将其放入数组中。您为复制状态而编写的函数的名称是什么? -
我的方法应该是
(vector-push-extend (make_a_copy (elt *all_states* 0)) *all_states*)吗?来自 oo 背景,如果我说v[0] = 1; v.push_back(v[0]); v[1] = 5;我期望向量 {1, 5}。应用到我目前的情况,我得到一个向量 {5, 5}。
标签: arrays functional-programming lisp common-lisp clisp