在Wolfram语言中称为Mathematica(一个Lisp)
Fold[g, 0, {a,b,c}]
评估为
g[g[g[0,a],b],c]
所以当
f[x_,y_]:=10 x + y
然后
Fold[f, 0, {1,2,3,4}]
评估为(从数字创建一个数字)
1234
在ClojureScript中,Wolfram语言的折叠等同于什么?
答案 0 :(得分:2)
你走了:
(reduce
(fn [r x] (+ (* r 10) x))
0 [1 2 3 4])
答案 1 :(得分:2)
数学函数折叠有几种折叠左侧,右侧折叠,它们在应用函数的方向上有所不同。 Clojure的减少是左折
与其他语言折叠相比,在clojure中,还将使用几个不同数量的参数调用reduce函数。
首先让我们定义一个告诉我们args的函数
user> (defn ++ [& args]
(println "++ called with" args)
(apply + args))
#'user/++
如果列表为空,则调用reduce函数时不带参数以生成“identity”值。对于加法标识为零,对于/它是1,等等。
user> (reduce ++ [])
++ called with nil
0
对于单个项目列表,它根本不会被调用
user> (reduce ++ [1])
1
并且对于其余的情况,使用两个参数调用它并将该函数应用为左侧关联运算符(在inflix语言中)或者只是在lisp中调用普通旧函数的函数。
user> (reduce ++ [1 2])
++ called with (1 2)
3
user> (reduce ++ [1 2 3])
++ called with (1 2)
++ called with (3 3)
6