Je suis à la recherche d'une façon propre et idiomatique de faire une "réduction en arrière" dans Clojure.Réduit un ensemble de fonctions sur une valeur?
J'ai
(def fns '(fn1 fn2 fn3))
(def val 42)
Je voudrais obtenir (fn3 (fn2 (fn1 val)))
, et je ne suis pas pointilleux sur l'ordre. Donc, je voudrais appliquer consécutivement une séquence de fonctions à une valeur, plutôt que consécutivement une séquence de valeurs à une fonction.
Suggestions? Merci!
J'aime cette solution, mais je pense inverser la collection de fonctions. '((comp f1 f2 f3) x)' évalue à '(f1 (f2 (f3 x)))' et le demandeur le voulait dans l'autre sens. – Jonas
Tout à fait raison. La question indiquait: «Je ne suis pas pointilleux sur la commande», ce que j'ai pris pour signifier soit qu'ils étaient commutatifs ou pourraient être arrangés de toute façon. Cependant, pour certaines fonctions, l'ordre est très important ((appliquer comp [/ +]) 1 2) -> 1/3 ;;; ((applique comp (reverse [/ +])) 1 2) -> 1/2 –
J'aime vraiment cette solution aussi, elle s'est retrouvée dans mon code. Merci! – Dan