我试图理解为什么这会产生似乎是循环列表的内容。
* (progn
(setf (car *x*) (append '(3) *x*))
2)
2 ;; No "apparent issue setting the value. Hence it is related to printing `*x*`
*x* ;; infinite loop, perhaps due to the structure of *x*??
为什么这是循环清单?我希望它不应该是循环列表
此问题与“重复”问题有何不同之处:
在这个问题中,我认为*x*
不应该是循环列表。在重复的答案链中,显示了如何创建循环列表,并且示例都未使用append
中setf
的结果。
好吧,我找到了答案: 我的困惑源于对spec的误解,他们说追加会返回一个新列表。
显然,新列表并不意味着它的每个成员都是新的(并不意味着返回一个副本)。追加的最后一个参数实际上是共享的......