dav*_*ers 16 clojure immutability data-structures
我最近听了Rich Hickey对软件工程广播的采访.在访谈期间,Rich提到Clojure的藏品是作为树木实施的.我希望用另一种语言实现持久性数据结构,并希望了解如何实现集合和Clojure的其他持久性数据结构.
在以下场景中,每个点的树会是什么样子?
创建集 {1 2 3}
建立联盟{1 2 3}和{4}
创建的差异{1 2 3 4}和{1}
我想了解如何产生的三组({1 2 3},{1 2 3 4},和{2 3 4})股权结构,而"删除"被如何处理.
我还想知道节点可能拥有的最大分支数.Rich在访谈中提到树木很浅,所以大概是分支因子大于2.
Rod*_*ada 22
你可能需要阅读Phil Bagwell的作品.他对数据结构的研究是Clojure,Haskell和Scala持久数据结构的基础.
Phil在Clojure/Conj上有这样的演讲:http://www.youtube.com/watch? v = K2NYwP90bNs
还有一些论文:
您还可以阅读Chris Okasaki的Purely Functional Data Structures.这篇博文讲述了这本书:http://okasaki.blogspot.com.br/2008/02/ten-years-of-purely-functional-data.html
SCd*_*CdF 11
你应该阅读Clojure编程,它非常详细地介绍了这一点,包括图片.简而言之,集合是深度优先搜索树木.我们可以这样展示你的例子:
(def x #{1 2 3})
x
|
| \
|\ 3
1 \
2
(def y (conj x 4))
x y
| / \
| \ 4
|\ 3
1 \
2
(def z (difference y #{1}))
x y
| / \
| \ 4
|\ 3
1/\
z- 2
Run Code Online (Sandbox Code Playgroud)
请注意,这些仅仅是指示性的,我并不是说这正是Clojure内部使用的布局.这是要点.