我正在尝试使用substitute-if.在这里,我试图取代那些即使在所有的值'((1) (2) (3) (4))与'(0)
[9]> (substitute-if '(0) #'evenp '((1) (2) (3) (4)) :start 1 :key #'car)
((1) #1=(0) (3) #1#)
Run Code Online (Sandbox Code Playgroud)
我感到困惑的#1=(0),并#1在列表中.我期待它回归'((1) (0) (3) (0)).
我是否误解substitute-if了列表的表示是如何工作或误解的?
我是否误解
substitute-if了列表的表示是如何工作或误解的?
可能是后者.
#1=...标记数据结构中的一个点并#1#引用它.这个想法是为了表明两个元素都引用相同的列表.(另请参阅http://www.lispworks.com/documentation/HyperSpec/Body/02_dhp.htm.)
就像是:
(let ((x '(0)))
(list '(1) x '(3) x))
Run Code Online (Sandbox Code Playgroud)
因为它们引用相同的对象,所以如果要修改第二个列表,修改也会显示在第四个列表中.