comp

Comme son nom l'indique, comp est utilisé pour fair de la composition de fonction. comp prend en paramètre une série de fonctions, et retourne la composition de ces fonctions. Prenons l'exemple suivant:

(def get-bar-foo (comp :foo :bar))

(println (get-bar-foo {:bar {:foo 1}}))

La fonction get-bar-foo est la composition des fonctions :bar et foo (rappelez vous, les keywords se comportent comme des fonctions et sont utiles pour récupérer des valeurs dans une map).

Le résultat de l'appel à get-bar-foo dans l'exemple précédent sera 1. En effet, on applique à la map passée en paramètre :bar puis :foo. Cela est donc équivalent à:

(:foo (:bar {:bar {:foo 1}}))

partial prend tout son sens lorsque combiné avec comp. Il devient facile de définir des fonctions avec partial puis de les combiner avec comp.

Précédent - Suivant -

(def get-bar-foo (comp :foo :bar))

(println (get-bar-foo {:bar {:foo 1}}))

(def count-and-add-one (comp (partial + 1) count))

(println (count-and-add-one [10 10 10]))

(def combine-math (comp (partial + 1) (partial * 2) (partial / 10)))

;; will do (+ 1 (* 2 (/ 10 100))) => 1.2
(println (combine-math 100))

powered by mcorbin - Available on Github