El sistema de Clojure para crear una jerarquía ad hoc de palabras clave es familiar para la mayoría de las personas que han pasado un poco de tiempo con el lenguaje. Por ejemplo, la mayoría de las demostraciones y presentaciones de la lengua incluyen ejemplos tales como¿Cuándo y cómo se deben usar las jerarquías independientes en clojure?
(derive ::child ::parent)
y se van a mostrar cómo esto se puede utilizar para el envío de múltiples método.
En todas las diapositivas y presentaciones que he visto, utilizan la jerarquía global. Pero es posible poner relaciones de palabras clave en jerarquías independientes, utilizando (derivar h :: child :: parent), donde h es creado por (make-hierarchy). Algunas preguntas, por lo tanto:
- ¿Existen directrices sobre cuándo esto es útil o necesario?
- ¿Hay alguna función para manipular jerarquías?
La fusión es particularmente útil, así que hacer esto:
(defn merge-h [& hierarchies]
(apply merge-with (cons #(merge-with clojure.set/union %1 %2) hierarchies))
Pero me preguntaba si tales funciones ya existen en alguna parte.
EDIT: Se ha cambiado la jerarquía "personalizada" a la jerarquía "independiente", ya que ese término describe mejor a este animal. Además, investigué un poco e incluí mi propia respuesta a continuación. Otros comentarios son bienvenidos.
Una preocupación con el ejemplo de los deportes es: (isa? Hockey-hierarchy: jordan: gretzky) => true. es decir, estas son jerarquías de tipo. Pero el punto es válido: las mismas palabras podrían ser tipos diferentes en relaciones de tipos diferentes en diferentes dominios haciendo que las jerarquías locales sean necesarias. De hecho, me sorprende que podamos meternos con la jerarquía global. – kennytilton