Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 为什么此功能不能按预期工作?_Clojure - Fatal编程技术网

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]

下面的代码将起作用(请注意有两个额外的
应用


问题在于如何使用varargs
my 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)))))