Система Clojure для создания специальной иерархии ключевых слов знакома большинству людей, которые потратили немного времени на язык.Например, большинство демонстраций и презентаций языка включают в себя примеры, такие как
(derive ::child ::parent)
, и они показывают, как это можно использовать для мульти-методической отправки.
Во всехслайды и презентации, которые я видел, они используют глобальную иерархию.Но можно поместить отношения ключевых слов в независимые иерархии, используя (производное h :: child :: parent), где h создается (make-иерархия).Поэтому некоторые вопросы:
- Существуют ли какие-либо рекомендации относительно того, когда это полезно или необходимо?
- Существуют ли какие-либо функции для управления иерархиями?
Объединение особенно полезно, поэтому я делаю это:
(defn merge-h [& hierarchies]
(apply merge-with (cons #(merge-with clojure.set/union %1 %2) hierarchies))
Но мне было интересно, если такие функции уже где-то существуют.
EDIT : изменена «пользовательская» иерархия на «независимую», поскольку этот термин лучше описывает это животное.Кроме того, я провел некоторое исследование и включил свой собственный ответ ниже.Дальнейшие комментарии приветствуются.