Clojure 为什么此功能不能按预期工作?
为什么此功能不能按预期工作Clojure 为什么此功能不能按预期工作?,clojure,Clojure,为什么此功能不能按预期工作 (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]
(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)))
问题在于如何使用varargs
my juxt
具有参数[&fns]
,而它在最后一个字符串中给定了[fns]
。结果返回的函数也是如此:它需要[&a]
,而提供[a]
下面的代码将起作用(请注意有两个额外的应用)
问题在于如何使用varargsmy juxt
具有参数[&fns]
,而它在最后一个字符串中给定了[fns]
。结果返回的函数也是如此:它需要[&a]
,而提供[a]
下面的代码将起作用(请注意有两个额外的应用)
希望fns
不是长列表,因为您没有使用尾部递归:)希望fns
不是长列表,因为您没有使用尾部递归:)
(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)))))