Supponiamo di avere tre funzioni di arità 1, 2 e 3, come di seguito:È possibile che il clojure valuti una catena di funzioni miste e restituisca una funzione parziale se necessario?
(defn I [x] x)
(defn K [x y] x)
(defn S [x y z] (x z (y z)))
Ha clojure hanno una funzione di valutazione o di linguaggio per la valutazione:
(I K S I I) as (I (K (S (I (I)))))
restituire una funzione parital di arietà 2?
Sto prendendo in considerazione la creazione di una macro che può assumere le definizioni di funzione semplice di cui sopra ed espanderle a funzioni multi-area che possono restituire risultati parziali. Non vorrei creare la macro se esiste già un modo integrato o idiomatico per ottenere ciò.
Ecco ciò che le macro espanse vorrebbero per le funzioni di cui sopra:
(defn I
([x] I x)
([x & more] (apply (I x) more)))
(defn K
([x] (partial K x))
([x y] x)
([x y & more] (apply (K x y) more)))
(defn S
([x] (partial S x))
([x y] (partial S x y))
([x y z] (x z (y z)))
([x y z & more] (apply (S x y z) more)))
Ho appena trovato questo e ho pensato che * potrebbe * essere perfetto per te, e se non altro, almeno utile ... http: //alfredodinapoli.wordpress.com/2011/03/16/a-bit-of -clojure-magic-and-high-order-functions-are-served/ –