List 我们能把不可变列表看作是树的对偶吗?

List 我们能把不可变列表看作是树的对偶吗?,list,haskell,data-structures,tree,functional-programming,List,Haskell,Data Structures,Tree,Functional Programming,我可能会画一个单词列表,比如: this -> is -> a -> test 然后通过分享,我可以画出两张清单: this -> is -> a -> test ^ | that -> was -> a -> hard 现在,如果我反转箭头,我得到一棵树,test作为根。这与图论/范畴论中的对偶概念相同。因此,我可以认为树和列表是双重概念 这是否正确/有

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

this -> is -> a -> test
然后通过分享,我可以画出两张清单:

this -> is -> a -> test
                     ^
                     |
that -> was -> a -> hard
现在,如果我反转箭头,我得到一棵树,test作为根。这与图论/范畴论中的对偶概念相同。因此,我可以认为树和列表是双重概念


这是否正确/有用?

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

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


所以,用懒散的语言来说,这是不正确的。

我认为不是,因为这种分享不是自动的。@DanielLyons,这意味着双重身份将是一片森林?@didierc我认为这意味着这个问题并不真正适用。实际上,这可能是一个问题。它被称为“图形缩减”是有原因的。