Clojure用於創建關鍵字特設層次結構的系統對於花費一點時間處理該語言的大多數人來說是很熟悉的。例如,大多數演示和語言的表現包括例子,如獨立層次結構何時以及如何在clojure中使用?
(derive ::child ::parent)
和他們去展示如何這可以用於多方法分派。
在我看到的所有幻燈片和演示文稿中,它們都使用全局層次結構。但是通過使用(派生h :: child :: parent),可以將關鍵字關係置於獨立的層次結構中,其中h由(make-hierarchy)創建。有些問題,因此:
- 是否有任何指導方針時,這是有用的或必要的?
- 是否有任何操作層次結構的函數?
合併是特別有用的,所以我這樣做:
(defn merge-h [& hierarchies]
(apply merge-with (cons #(merge-with clojure.set/union %1 %2) hierarchies))
但我在想,如果某個已經存在這樣的功能。
編輯:將「自定義」層級更改爲「獨立」層級,因爲該術語更好地描述了這種動物。另外,我做了一些研究,並在下面列出了我自己的答案。歡迎進一步的意見。
運動例子的一個問題是:(isa?hockey-hierarchy:jordan:gretzky)=> true。即,這些是類型層次結構。但是這一點是有效的:在不同領域的不同類型關係中,相同的詞可能是不同的類型,從而使得本地層次結構是必需的。事實上,我很驚訝我們被允許混淆全球層級。 – kennytilton 2016-03-31 07:27:13