ClojureScript 中 Wolfram 语言的 Fold 等价物是什么?
What is the equivalent of Wolfram Language's Fold in ClojureScript?
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 语言的 Fold 等效于什么?
给你:
(reduce
(fn [r x] (+ (* r 10) x))
0 [1 2 3 4])
数学函数折叠有几种风格,向左折叠和向右折叠,这在应用函数的方向上有所不同。 Clojure 的 reduce 向左折叠
另外,在 clojure 中,与其他具有 fold 的语言相比,reducing 函数将使用几个不同数量的参数调用。
首先让我们定义一个函数,告诉我们它是 args
user> (defn ++ [& args]
(println "++ called with" args)
(apply + args))
#'user/++
如果您的列表为空,则不带参数调用缩减函数以生成 "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
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 语言的 Fold 等效于什么?
给你:
(reduce
(fn [r x] (+ (* r 10) x))
0 [1 2 3 4])
数学函数折叠有几种风格,向左折叠和向右折叠,这在应用函数的方向上有所不同。 Clojure 的 reduce 向左折叠
另外,在 clojure 中,与其他具有 fold 的语言相比,reducing 函数将使用几个不同数量的参数调用。
首先让我们定义一个函数,告诉我们它是 args
user> (defn ++ [& args]
(println "++ called with" args)
(apply + args))
#'user/++
如果您的列表为空,则不带参数调用缩减函数以生成 "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