回答
'(A (B (D) (E)) (C (F)))
有只使用cons
做这件事的可怕方式:
(defn mktree
([label l r] (cons label (cons l r)))
([leaf] (cons leaf (cons nil nil))))
(defn getlabel [t] (first t))
(defn getchildren [t] (rest t))
(defn getleft [t] (first (getchildren t)))
(defn getright [t] (rest (getchildren t)))
注意,孩子是不是列表;这是一对。如果你的树不仅仅是二进制的,你可以把它作为一个列表。当然没有左或右孩子的时候使用零。
否则,请参阅this answer。
在画面树:
(mktree 'A (mktree 'B (mktree 'D) (mktree 'E)) (mktree 'C nil (mktree 'F)))
它有第一个和其余的代替汽车cdr – 2009-11-24 04:38:16
谢谢;)普通lisp有两个。我会编辑。它确实有'缺点'? – 2009-11-24 06:45:13
我认为你应该编辑它来说“我只知道普通的lisp”。 Common Lisp不是'Lisp'。它是* a * Lisp。 – Rayne 2009-11-24 09:07:36
树underly只是在Clojure的一切,因为它们本身这么好听到持久性数据结构的结构共享。地图和矢量实际上是具有高支化因子的树,以使它们有界的查找和插入时间。所以我可以给出的最短答案(尽管它不是很有用),我真的推荐Purely functional data structures by Chris Okasaki作为这个问题的真正答案。还含有丰富希基对Clojure的数据结构视频blip.tv
(set 'A 'B 'C)
- 1. Node类代表一棵二叉树C++
- 2. 在clojure中查找一棵树的最大值和最小值
- 3. 在C++中表示一棵树
- 4. 二叉搜索树 - 复制一棵树到另一棵树
- 5. 遍历一棵树
- 6. 使用CakePHP树行为在一个表中有多棵树
- 7. SimpleXML:将一棵树追加到另一棵树
- 8. 在C++中实现一棵树
- 9. 在CakePHP中手动构建一棵树
- 10. 在Django中序列化一棵树
- 11. 如何在R中走上一棵树?
- 12. 急于在NHibernate中加载一棵树
- 13. 如何将一棵树分割成两棵子树
- 14. CakePHP树行为,每个表多棵树
- 15. 画一棵树使用Qt
- 16. 构建一棵树“向后”
- 17. 走一棵树向后SQL
- 18. C++绘制一棵树
- 19. 创建一棵B型树
- 20. 一棵树的和弦
- 21. 在RAM中保留一棵树/哈希表
- 22. 随机绘制500棵树中的一棵林林包
- 23. 穿越两棵树在一起?
- 24. 在树叶中放置一个节点4棵树拖放
- 25. 微型优化迭代通过一棵树在C#
- 26. 并行继承树,其中来自一棵树的类具有来自另一棵树的类的容器
- 27. 比较两棵树
- 28. 从矩形列表中创建一棵树
- 29. 从SQLalchemy中的自引用表创建一棵树
- 30. 如何解析一个公式在C#中建立一棵树?
跆拳道是你错了人,每当有人不喜欢的问题,他们打接近。 stackoverflow是一个非常好的学习地点,现在已经变成digg了,有很多白痴。如果你不喜欢这个问题那是什么反对票。 – 2009-11-24 04:43:38
他们投票决定关闭它,因为它确实是重复的。 – Rayne 2009-11-24 05:42:43
同意;这不是关于*喜欢*的问题;正如你所说的重新学习一些东西 - 也许从上次有人问同样的问题开始学习? – 2009-11-24 16:35:58