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))),而且我对这个订单并不挑剔.所以我想连续地将一系列函数应用于一个值,而不是连续地将一系列值应用于函数.
建议?谢谢!
这只是减少.记住功能也是对象.此外,你仍然按照f1,f2等顺序应用你的函数.不要与它读取的事实混淆(f4(f3 ...
所以只需使用常规减少.
(reduce #(%2 %1) val functions)
Run Code Online (Sandbox Code Playgroud)
另一种思考方式是作为一种功能组合:
user=> ((apply comp [inc dec inc]) 42)
43
Run Code Online (Sandbox Code Playgroud)