我一直试图了解列表和差异列表在图表结构中的样子。我理解像[a1,a2,a3,.. an | []]这样的列表的基本结构。
但是我无法理解差异列表的样子?
例如[1,2,3,4] - [3,4]
答案 0 :(得分:2)
X-Y
是术语-(X, Y)
。所以[1,2,3,4]-[3,4]
主要只是一对两个列表,每个列表都可以很容易地显示在树中,就像你展示的那样。
现在考虑一个[E1,E2,...,E_n|Rest]
形式的列表,即最终尾部尚未实例化的位置。同样,您可以在树中显示这个,就像您展示的那样,只需替换end-of-list
(这无论如何都是错误的,因为它实际上应该是原子nil:[]
)Rest
现在的想法是始终跟踪尚未实例化的尾部,这是一个单一的逻辑变量。通过实例化此变量,再次将其尾部尚未实例化的列表以及其尾部再次单独跟踪的列表,您可以随时追加其他元素,与原始列表已达到的长度无关
您可以将这样的列表及其最终尾部表示为[E1,E2,...,E_n|Rest]-Rest
对,但实际上最好使用两个不同的参数并将列表及其未实例化的最终尾部作为两个单独的参数传递( explanation)。