如何打印显示共享结构?
How to print showing shared structure?
例如,下面计算的两个表达式具有相同的“打印”表示形式,即 ((A) (A))
,但它们具有非常不同的 内部 结构。这里的结构是 shared:
* (let ((item '(a))) (list item item))
((A) (A))
这里每个 (a)
都是一个不同的实体:
* '((a) (a))
((A) (A))
具体来说,第一个表达式的值是一个双元素列表,其中两个元素 相同;第二个表达式的值也是一个双元素列表,但它的两个元素是 distinct(即 not 相同)。
我怎样才能以一种更明显的方式来表示这两个值,使它们的内部结构差异更加明显?
你要找的是*print-circle*
:
* (setq *print-circle* t)
T
* '((a) (a))
((A) (A))
* (let ((item '(a))) (list item item))
(#1=(A) #1#)
如果你想要“print
-
read
一致性”,你应该调查一下
*print-readably*
和
with-standard-io-syntax
:
(equal (read-from-string (with-standard-io-syntax (write-to-string x)))
x)
应该 return T
或发出类型错误信号
print-not-readable
.
例如,下面计算的两个表达式具有相同的“打印”表示形式,即 ((A) (A))
,但它们具有非常不同的 内部 结构。这里的结构是 shared:
* (let ((item '(a))) (list item item))
((A) (A))
这里每个 (a)
都是一个不同的实体:
* '((a) (a))
((A) (A))
具体来说,第一个表达式的值是一个双元素列表,其中两个元素 相同;第二个表达式的值也是一个双元素列表,但它的两个元素是 distinct(即 not 相同)。
我怎样才能以一种更明显的方式来表示这两个值,使它们的内部结构差异更加明显?
你要找的是*print-circle*
:
* (setq *print-circle* t)
T
* '((a) (a))
((A) (A))
* (let ((item '(a))) (list item item))
(#1=(A) #1#)
如果你想要“print
-
read
一致性”,你应该调查一下
*print-readably*
和
with-standard-io-syntax
:
(equal (read-from-string (with-standard-io-syntax (write-to-string x)))
x)
应该 return T
或发出类型错误信号
print-not-readable
.