В Haskell мы Data.Function.on
:
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
(.*.) `on` f = \x y -> f x .*. f y
В Clojure, я хочу иметь возможность определить, например, предикат анаграммы следующим образом:
(defn anagram? [word other-word]
(and (not= word other-word)
((on = sort) word other-word)))
Это тривиально реализовать:
(defn on [g f] (fn [x y] (g (f x) (f y))))
Но есть ли встроенная функция что достигает той же цели? Кажется, я не могу найти его.