System Clojure do tworzenia hierarchii ad hoc słów kluczowych jest znany większości ludzi, którzy spędzili trochę czasu z tym językiem. Na przykład, większość pokazy i prezentacje z języka obejmują przykłady takich jakKiedy i jak należy używać niezależnych hierarchii w clojure?
(derive ::child ::parent)
i pokazać, w jaki sposób może to być wykorzystywane do wielu metod wysyłki idą dalej.
We wszystkich prezentacjach i slajdach, które widziałem, używają globalnej hierarchii. Ale możliwe jest umieszczanie relacji słów kluczowych w niezależnych hierarchiach za pomocą (wyprowadzić h :: child :: parent), gdzie h jest tworzone przez (make-hierarchy). W związku z tym niektóre pytania:
- Czy istnieją jakieś wytyczne dotyczące tego, kiedy jest to przydatne lub konieczne?
- Czy istnieją jakieś funkcje do manipulowania hierarchiami?
Łączenie jest szczególnie przydatna, więc mogę to zrobić:
(defn merge-h [& hierarchies]
(apply merge-with (cons #(merge-with clojure.set/union %1 %2) hierarchies))
Ale zastanawiałem się, czy takie funkcje już istnieją gdzieś.
EDIT: Zmieniono "niestandardową" hierarchię na "niezależną" hierarchię, ponieważ termin ten lepiej opisuje to zwierzę. Poza tym zrobiłem kilka badań i dodałem poniżej własną odpowiedź. Dalsze komentarze są mile widziane.
Jedną z obaw dotyczących przykładu sportowego jest: (isa? Hockey-hierarchy: jordan: gretzky) => true. tj. są to hierarchie typów. Ale punkt jest ważny: te same słowa mogą być różnymi typami w różnych typach relacji w różnych domenach, co wymaga lokalnej hierarchii. W rzeczywistości jestem zaskoczony, że możemy mieszać się w globalną hierarchię. – kennytilton