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))