Załóżmy, że masz trzy funkcje liczbę operandów 1, 2 i 3, jak poniżej:Czy clojure może ocenić łańcuch mieszanych funkcji arytmetycznych i w razie potrzeby zwrócić funkcję częściową?
(defn I [x] x)
(defn K [x y] x)
(defn S [x y z] (x z (y z)))
Czy clojure posiadają funkcję oceny lub idiom do oceny:
(I K S I I) as (I (K (S (I (I)))))
przekazujących parital funkcję liczbę operandów 2?
Rozważam stworzenie makra, które może przyjmować powyższe proste definicje funkcji i rozszerzać je do funkcji wielu elementów, które mogą zwracać częściowe wyniki. Nie chciałbym tworzyć makra, jeśli istnieje już wbudowany lub idiomatyczny sposób, aby to osiągnąć.
Oto co rozbudowane makra chciałby dla powyższych funkcji:
(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)))
Po prostu znalazłem to i pomyślałem, że * może * będzie idealne dla ciebie, a jeśli nic innego, przynajmniej pomocne ... http: //alfredodinapoli.wordpress.com/2011/03/16/a-bit-of - funkcje magii i wyższego rzędu są obsługiwane/ –