Giả sử bạn có ba chức năng của arity 1, 2 và 3 như sau:Clojure có thể đánh giá một chuỗi các chức năng phối hợp hỗn hợp và trả về một phần chức năng nếu cần?
(defn I [x] x)
(defn K [x y] x)
(defn S [x y z] (x z (y z)))
Liệu clojure có chức năng thẩm định hoặc thành ngữ để đánh giá:
(I K S I I) as (I (K (S (I (I)))))
trở về một hàm parital của arity 2?
Tôi đang xem xét việc tạo macro có thể lấy các định nghĩa hàm đơn giản ở trên và mở rộng chúng thành các hàm đa hàm có thể trả về một phần kết quả. Tôi sẽ không muốn tạo macro nếu đã có một cách tích hợp hoặc thành ngữ để thực hiện việc này.
Đây là những gì các macro mở rộng muốn cho các chức năng trên:
(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)))
Chỉ tìm thấy điều này, và nghĩ rằng nó * có thể * hoàn hảo cho bạn, và nếu không có gì khác, ít nhất là hữu ích ... http: //alfredodinapoli.wordpress.com/2011/03/16/a-bit-of -clojure-magic-and-high-order-functions-được-phục vụ/ –