Допустим, у нас есть эта иерархия родитель/потомок:
(derive ::integer ::decimal)
(derive ::positive-integer ::integer)
(derive ::long ::integer)
Что такое идиоматика Clojure для реализации способа поиска низшего общего предка в такой иерархии? То есть:
(lca ::positive-integer ::long) ; => ::integer
Мои первоначальные мысли включают использование рекурсивной функции, обходящей комбинации parents
каждого аргумента, но я подозреваю, что, вероятно, есть лучший подход.
Моя мотивация состоит в том, чтобы использовать это как функцию отправки для мультиметода, который принимает 2 аргумента и отправляет в наиболее подходящую реализацию на основе типов аргументов.