【发布时间】:2019-09-13 02:49:36
【问题描述】:
直接说明问题;我在 let 语句中将 'temp' 指定为 *TEMP*。当我这样做时,*TEMP* 会准确分配每次迭代时分配的“temp”。最后我最终会推动相同的“temp”值。不知道为什么,你们知道这里出了什么问题吗?
(defparameter *TEMP* `((key value)(key2 value2)(key3 x))
(defparameter *SYNS* NIL)
(defparameter *PUSH-HERE* NIL)
(dolist (i *matrix*)
(dolist (j i)
(if (equal 'keyword (first j))
(foo (second j)))) ;fills *SYNS*
(let ((temp *TEMP*))
;(print *TEMP*) prints temps last assigned value?
(set-key temp (get-key i)) ;gets key's value
(set-key2 temp (get-key2 i)) ;gets key2's value
(loop while (not (equal 0 (length *SYNS*)))
do (set-key3 temp (pop *syns*))
(push temp *PUSH-HERE*))))
结果值变成这样;
((key last-assigned-value)(key2 last-assigned-value)(key3 last-assigned-value)
(key last-assigned-value)(key2 last-assigned-value)(key3 last-assigned-value)
(key last-assigned-value)(key2 last-assigned-value)(key3 last-assigned-value))
代替;
((key first-assigned-value)(key2 first-assigned-value)(key3 first-assigned-value)
(key second-assigned-value)(key2 second-assigned-value)(key3 second-assigned-value)
(key last-assigned-value)(key2 last-assigned-value)(key3 last-assigned-value))
我尝试过打印,就在push line之前,按我的意愿打印了temp,但是在整个迭代完成后,我得到了我放在上面的无意列表。
【问题讨论】:
-
什么是
*matrix*? -
如果你的代码不是一个完整的列表,很难猜出它的作用。
-
matrix 是 temp 等条目的集合。我正在尝试在 foo 函数中组合新值,并通过 rplacd 函数将这些新值强制设置为模板,此处显示为 temp,然后将它们附加到 matrix。整个代码在 github.com/karavana/cogs/blob/dev/core/funcs_usingLoad.lisp
-
顺便说一句,文件中有标签,在线阅读很困难。
-
你的意思是github代码?是的,需要编辑,但这是我目前最少的问题..
标签: list common-lisp variable-assignment