Кажется, я придумываю слишком много мультидиспетчерских функций и хотел бы уменьшить их количество. Подход, который я сейчас использую, состоит в том, чтобы одна многофункциональная функция вызывала другую многофункциональную, но это кажется неправильным. Вот пример того, что я хотел бы:
(defmulti foo
(fn [bar baz] [(:type bar) (:x baz) (:y bar)]))
(defmethod foo [:z :y _] [bar baz] (<I will take anything for the 3rd element>))
(defmethod foo [:z _ :x] [bar baz] (<I will take anything for the 2nd element>))
(defmethod foo [:z :y :x] [bar baz] (<I must have this dispatch value>))
...
Основная идея заключается в том, что в первом случае методу все равно, какой третий элемент значения отправки, он примет что угодно, но вторым элементом должен быть :y.
Возможно ли что-то подобное в clojure?
Возможно, я прошу предикатную отправку, которая, я думаю, все еще находится в стадии разработки.