Angenommen, Sie drei Funktionen von arity 1, 2 und 3, wie unten haben:Kann clojure eine Kette von gemischten Funktionen auswerten und bei Bedarf eine Teilfunktion zurückgeben?
(defn I [x] x)
(defn K [x y] x)
(defn S [x y z] (x z (y z)))
Hat clojure hat eine Bewertungsfunktion oder Idiom für die Bewertung:
(I K S I I) as (I (K (S (I (I)))))
2 eine parital Funktion von arity Rückkehr?
Ich überlege mir, ein Makro zu erstellen, das die obigen einfachen Funktionsdefinitionen übernehmen und zu Multiaritätsfunktionen erweitern kann, die Teilergebnisse liefern können. Ich würde das Makro nicht erstellen wollen, wenn es bereits einen eingebauten oder idiomatischen Weg dafür gibt. Hier
ist, was die erweiterten Makros für die oben genannten Funktionen möchten:
(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)))
Gerade gefunden, und dachte, es * könnte * perfekt für Sie sein, und wenn nichts anderes, zumindest hilfreich ... http: //alfredodinapoli.wordpress.com/2011/03/16/a-bit-of -clojure-magic-and-high-order-functions-served/ –