我们可以将不可变列表视为树的双重列表吗?

时间:2013-03-12 17:05:19

标签: list haskell data-structures tree functional-programming

我可能会画一些单词列表:

this -> is -> a -> test

然后通过分享,我可以绘制两个列表:

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

现在,如果我反转箭头,我得到一棵树,以测试为根。这与图/类别理论中的二元性概念相同。因此,我可以将树木和列表视为双重概念。

这是正确/有用吗?

1 个答案:

答案 0 :(得分:18)

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

ones = 1 : ones

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

所以,懒惰的语言并不是这样。