2013-03-20 14 views
3

写一个函数,它允许你创建的功能成分。 参数列表应具有可变数量的函数,并创建一个函数,从右到左应用它们。

(fn [& fs] 
    (fn [& args] 
    (->> (reverse fs) 
     (reduce #(apply %2 %1) args)))) 

http://www.4clojure.com/problem/58

=> (= [3 2 1] ((_ rest reverse) [1 2 3 4])) 

clojure.lang.ArityException: Wrong number of args (4) passed to: core$rest 

是什么造成这个错误?我看不到它。

回答

2

它在你使用的apply - 这原来最后一个参数为参数的扁平列表,创建一个呼叫的样子:

(rest 1 2 3 4)

这大概不是你打算什么....并解释你所得到的错误。