我们可以将不可变列表视为树的对偶吗?

Posted

技术标签:

【中文标题】我们可以将不可变列表视为树的对偶吗?【英文标题】:Can we think of immutable lists as a dual to trees? 【发布时间】:2013-02-28 08:10:35 【问题描述】:

我可能会画一个单词列表,例如:

this -> is -> a -> test

然后通过分享,我可能会画出两个列表:

this -> is -> a -> test
                     ^
                     |
that -> was -> a -> hard

现在,如果我反转箭头,我会得到一棵树,以 test 作为根。这与图/类别理论中的对偶概念相同。因此,我可以将树和列表视为双重概念。

这是正确/有用的吗?

【问题讨论】:

我认为不会,因为这种分享不是自动的。 @DanielLyons 这意味着对偶将是一片森林? @didierc 我认为这意味着这个问题并不适用。 实际上,这可能是CS 的问题。 【参考方案1】:

共享和懒惰允许你拥有任意的循环结构。例如,在 Haskell 中的定义

ones = 1 : ones

生成一个由单个顶点(对应于 1)和一个循环(在图论上,而不是编程意义上)组成的图。通过反转箭头,你会得到相同的结构,而且它不是一棵树(因为它有循环)。

所以,在惰性语言中它是不正确的。

【讨论】:

确实如此。它被称为“图形缩减”是有原因的。

以上是关于我们可以将不可变列表视为树的对偶吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python不可变对象元组(tuple)详解

第二周小结

将不可变的 fromJS 对象转换回 json

不能将不可变的'Box'内容借用为可变的

可变长参数(*,**)

scala04.数据结构(重点)