Sto cercando di catena di alcune funzioni in Clojure:Come concatenare più funzioni?
(f4 (f3 (f2 (f1 foo))))
C'è un comodo zucchero sintassi per questo? Qualcosa di simile:
(with-all-of-them foo f1 f2 f3 f4)
Sto cercando di catena di alcune funzioni in Clojure:Come concatenare più funzioni?
(f4 (f3 (f2 (f1 foo))))
C'è un comodo zucchero sintassi per questo? Qualcosa di simile:
(with-all-of-them foo f1 f2 f3 f4)
Usa ->
macro.
(-> foo f1 f2 f3 f4)
O reduce
:
(reduce #(%2 %1) foo [f1 f2 f3 f4])
Il trucco 'reduce' è carino, solo se un po 'barocco :) – vemv
@vemv Penso che' -> 'sia carino. L'opzione 'reduce' mostra chiaramente il modello operativo e, a differenza della macro di threading, è felice di assumere una sequenza sconosciuta in fase di compilazione. –
C'è un threading macro ->
:
(-> foo f1 f2 f3 f4)
Successivo a Figwheel questa è davvero la cosa più bella che ho visto oggi. –
In realtà la tua descrizione di with-all-of-them
è molto vicino al comp
, tranne che comp
restituisce una funzione che è necessario chiamare te stesso:
(f4 (f3 (f2 (f1 foo))))
== ((comp f4 f3 f2 f1) foo)
Quindi, with-all-of-them
potrebbe essere im completato come segue:
(defn with-all-of-them [arg & fs]
((apply comp fs) arg))
intendi comp? –
vedere http://stackoverflow.com/questions/11918554/can-clojure-evaluate-a-chain-of-mixed-arity-functions-and-return-a-partial-funct e vedere se questo ti aiuta –