在ClojureScript中,Wolfram语言的折叠相当于什么?

时间:2016-05-10 18:57:07

标签: clojure 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语言的折叠等同于什么?

2 个答案:

答案 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