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 当FN作为参数传递时,执行函数向量不起作用_Clojure - Fatal编程技术网

Clojure 当FN作为参数传递时,执行函数向量不起作用

Clojure 当FN作为参数传递时,执行函数向量不起作用,clojure,Clojure,此代码不作为非指定代码工作: (((fn [& fns] (fn [& params] (reduce #(%2 %1) params fns))) rest reverse) [1 2 3 4]) ;; => () instead of (3 2 1) 是否有办法仅通过在%2%1内进行更改来修复它 我认为这个问题相当于:如何转换为rest 注意:这是我解决问题的过程。我见过其他解决方案,但我对这个具体实现很好奇。尝试只使用[params]而不是

此代码不作为非指定代码工作:

(((fn [& fns]
    (fn [& params]
      (reduce #(%2 %1) params fns)))
  rest reverse)
 [1 2 3 4]) ;; => () instead of (3 2 1)
是否有办法仅通过在%2%1内进行更改来修复它

我认为这个问题相当于:如何转换为rest

注意:这是我解决问题的过程。我见过其他解决方案,但我对这个具体实现很好奇。

尝试只使用[params]而不是[¶ms],因此:

[¶ms]参数获取集合[1 2 3 4]并将其再次包装到列表中,将[1 2 3 4]作为reduce函数的种子


如果只想在%2%1内部进行更改,则需要展开[1 2 3 4],但只需第一次。您可以看到first是否返回了一个集合,所以coll?先呼叫%1,然后再呼叫第一个%1,否则请保持%1不变。看起来很复杂,但不适用于其他输入数据

太棒了,非常感谢。我要求在%2%1内部进行更改,因为我不了解参数,所以此解决方案非常完美。也谢谢你的明确解释。
(fn [params] (reduce #(%2 %1) params fns))