Подтвердить что ты не робот

Состав функции в Clojure?

Может ли Clojure реализовать (g ∘ f) конструкции вроде Haskell g . f? В настоящее время я использую обходные пути, например (fn [n] (not (zero? n))), что не так приятно:)

4b9b3361

Ответ 1

В clojure.core называется функция comp. Например.

((comp not zero?) 5)
; => true

Вы также можете рассмотреть возможность использования ->/->>, например.

(-> 5 zero? not)
; => true

Ответ 2

Вы можете использовать Clojure ярлык для чтения-макроса для анонимных функций, чтобы переписать вашу версию за меньшее количество нажатий клавиш.

user=> (#(not (zero? %)) 1)
true

Для конкретного случая составления not и другой функции вы можете использовать complement.

user=> ((complement zero?) 1)
true

Использование not в комбинации с when и if достаточно распространено, что if-not и when-not являются основными функциями.

user=> (if-not (zero? 1) :nonzero :zero)
:nonzero

Ответ 3

Другим способом является (reduce #(%2 %1) n [zero? not]), но мне нравится (comp not zero?), уже упомянутый Михалом, лучше.