为什么引号字符“'”相对于'#1='的顺序在循环列表中很重要?

Why order of quote character "'" in relation to '#1=' matters in circular lists?

我正在试验循环列表并编写了一个有缺陷的图表查看器。所以当我尝试绘制 2 个不同的图形时

(graph-viewer:graph '#1=(1 2 3 #1#) "a")
(graph-viewer:graph #1='(1 2 3 #1#) "b")

我知道谁与后一个版本的图片不同,图中包含引号。

你需要考虑 reader 是如何工作的。

当它看到 #1=, it knows to store whatever comes next and re-use it on #1# 时 - 将其视为“变量 1”的“绑定”。

当它看到 '<blah> 时,它会将其读作 (quote <blah>)

因此,当它看到 '#1=(1 2 3 #1#) 时,它会将其读作

(quote (1 2 3 *))
       ^      |
       |      |
       +------+

(quote 在“绑定 1”的 之外)

#1='(1 2 3 #1#) 读作

(quote (1 2 3 *))
^             |
|             |
+-------------+

(quote 的“绑定 1”中

上图中的“箭头”为参考,即*沿箭头指向