üç Arity 1, 2 fonksiyonlarını ve aşağıda 3 olduğunu varsayalım:Karışık bir aritmetik fonksiyon zincirini değerlendirebilir ve gerektiğinde kısmi işlev döndürür?
(defn I [x] x)
(defn K [x y] x)
(defn S [x y z] (x z (y z)))
Clojure değerlendirmek için bir değerlendirme işlevi veya deyim var mı:
(I K S I I) as (I (K (S (I (I)))))
Arity 2'nin bir parital işlevi dönen?
Yukarıdaki basit işlev tanımlarını alıp kısmi sonuçları döndürebilen çok işlevli işlevlere genişleten bir makro oluşturmayı düşünüyorum. Bunu gerçekleştirmek için zaten yerleşik veya deyimsel bir yol varsa, makro oluşturmak istemem.
(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)))
Sadece bunu buldum, ve * senin için mükemmel olabileceğini düşündüm, ve başka bir şey değilse, en azından yararlı ... http: //alfredodinapoli.wordpress.com/2011/03/16/a-bit-of -clojure-magic-ve-high-order-functions-are-served/ –