减少一组值的函数?

Dan*_*Dan 4 functional-programming clojure map

我正在寻找一种干净,惯用的方式在Clojure中进行"向后缩减".

我有

(def fns '(fn1 fn2 fn3))
(def val 42)
Run Code Online (Sandbox Code Playgroud)

我想获得(fn3 (fn2 (fn1 val))),而且我对这个订单并不挑剔.所以我想连续地将一系列函数应用于一个值,而不是连续地将一系列值应用于函数.

建议?谢谢!

z5h*_*z5h 7

这只是减少.记住功能也是对象.此外,你仍然按照f1,f2等顺序应用你的函数.不要与它读取的事实混淆(f4(f3 ...

所以只需使用常规减少.

(reduce #(%2 %1) val functions) 
Run Code Online (Sandbox Code Playgroud)


Tim*_*ley 5

另一种思考方式是作为一种功能组合:

user=> ((apply comp [inc dec inc]) 42)
43
Run Code Online (Sandbox Code Playgroud)