Suponga que tiene tres funciones de aridad 1, 2 y 3 de la siguiente manera:¿Puede clojure evaluar una cadena de funciones mixtas y devolver una función parcial si es necesario?
(defn I [x] x)
(defn K [x y] x)
(defn S [x y z] (x z (y z)))
¿Tiene clojure tiene una función de evaluación o idioma para evaluar:
(I K S I I) as (I (K (S (I (I)))))
el retorno de una función parital de aridad 2?
Estoy considerando crear una macro que pueda tomar las definiciones de funciones simples anteriores y expandirlas a funciones multiareas que pueden devolver resultados parciales. No me gustaría crear la macro si ya existe una forma incorporada o idiomática para lograr esto.
Esto es lo que las macros expandidas gustaría que las funciones anteriores:
(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)))
Acabo de encontrar esto, y pensé que * puede * ser perfecto para usted, y en todo caso, al menos útil ... http: //alfredodinapoli.wordpress.com/2011/03/16/a-bit-of -clojure-magic-and-high-order-functions-are-served/ –