CLISP表示列表

Spi*_*all 3 lisp common-lisp

我正在尝试使用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了列表的表示是如何工作或误解的?

mel*_*ene 6

我是否误解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)

因为它们引用相同的对象,所以如果要修改第二个列表,修改也会显示在第四个列表中.