我發現defadt
宏clojure.contrib.types。不幸的是,在clojure中沒有關於ADT用法的有用文檔。我搜索了幾個小時,發現了關於它的小部分信息。 clojure中的ADT是什麼?如何使用它們?任何信息都將是有益的:)Clojure的代數數據類型
6
A
回答
2
一些信息可以在examples.clj文件中的src/Clojure的/的contrib /類型中找到。它顯示了一個定義爲adt的樹結構的示例:
(defadt ::tree
empty-tree
(leaf value)
(node left-tree right-tree))
更多信息在源文件中。
1
有ADT公司的Clojure中here一個非常有趣的例子:
我們定義一個ADT發生器是這樣的:
(defmacro data
[adt-name equals-sign & constructors]
`(do
(defn ~(symbol (str adt-name "?")) [~'obj]
(= ~(str adt-name) (adt-name ~'obj)))
[email protected](for [[type-name & fields]
(filter (partial not= '(|))
(partition-by (partial = '|) constructors))]
(apply (partial emit-constructor adt-name type-name)
fields))))
鑑於哈斯克爾例如:
data Tree a = Empty
| Leaf a
| Node Tree Tree
然後我們寫Clojure的
(data Tree = Empty | Leaf value | Node left right)
這是很酷。
相關問題
- 1. 如何使用代數數據類型的類型同義詞?
- 2. 代數數據類型的類型級集合
- 3. 抽象數據類型和代數數據類型之間的區別
- 4. 序列化f#代數數據類型
- 5. 推導查看代數數據類型
- 6. 代數數據類型相當於C
- 7. 哈斯克爾代數數據類型
- 8. 代數數據類型和平等
- 9. 聲明代數數據類型方程
- 10. 鍵入代數數據類型與通用類型
- 11. Clojure的元數據
- 12. 數據庫中的代碼列類型
- 13. Clojure的計算機代數
- 14. 是否可以在Clojure中進行數據類型繼承?
- 15. 類型/種類Haskell(也許)在代數數據類型中的混淆
- 16. 數據類型
- 17. 代表有效類型的Haskell數據類型
- 18. 類型類Haskell中的數據類型
- 19. 「模式匹配」代數數據類型的構造函數
- 20. perl5代碼(忽略)perl6數據類型
- 21. BOOLEAN數據類型程序代碼
- 22. Hierarchyid數據類型和代碼優先
- 23. Clojure數據結構函數
- 24. Clojure內容類型?
- 25. haskell中的代數類型
- 26. 假設數據類型的鬆散類型數據集
- 27. 如何理解C++數據類型的本地數據類型?
- 28. Umbraco數據類型。檢索可能的數據類型列表。
- 29. 數據類型(我認爲的數據類型?)
- 30. [數據類型]和[數據類型[]]之間的差異
是defadt過時? – 2017-03-20 18:19:55