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

Mik*_*cki 6 tree haskell functional-programming list data-structures

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

this -> is -> a -> test
Run Code Online (Sandbox Code Playgroud)

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

this -> is -> a -> test
                     ^
                     |
that -> was -> a -> hard
Run Code Online (Sandbox Code Playgroud)

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

这是正确/有用的吗?

Rom*_*aka 18

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

ones = 1 : ones
Run Code Online (Sandbox Code Playgroud)

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

所以,在懒惰的语言中并非如此.

  • 确实.它被称为"图形缩减"是有原因的. (4认同)