为什么此功能无法按预期工作?
(defn my-juxt
[& fns]
(if (= 1 (count fns))
(fn [& a] (list (apply (first fns) a)))
(fn [& a]
(cons (apply (first fns) a) ((my-juxt (rest fns)) a)))))
注意:这有效 -
(defn new-juxt
[& fns]
(fn [& a]
(map #(apply % a) fns)))
答案 0 :(得分:6)
问题在于如何使用varargs。 my-juxt
在最后一个字符串中为[& fns]
提供了[fns]
。结果返回的函数也是如此:它在[& a]
提供时期望[a]
。
以下代码可以使用(请注意另外两个apply
)
(defn my-juxt
[& fns]
(if (= 1 (count fns))
(fn [& a] (list (apply (first fns) a)))
(fn [& a]
(cons (apply (first fns) a)
(apply (apply my-juxt (rest fns)) a)))))