【发布时间】:2015-09-21 09:45:55
【问题描述】:
我目前正在研究 Haskell,我对它的一些特性很着迷,例如使用累加器的末端递归函数。
问题:
- javascript 中是否有类似的构造?或者它甚至 关于效率是有道理的,因为 javascript 不像 像 Haskell 一样运行?
- 有没有像 ramda, lodash, ...这样的库支持这种方式 编程
-
如果是这样,你会如何用javascript写这个:
power_acc :: Double -> Int -> Double power_acc x y = power_acc_h x y 1 power_acc_h :: Double -> Int -> Double -> Double power_acc_h x 0 acc = acc power_acc_h x y acc = power_acc_h x (y-1) (acc*x)
【问题讨论】:
-
我的 2 美分:尽管我很喜欢函数式编程,但我发现习惯用法 accumulator+recursion 是有状态
for循环的一种有点不雅的编码。在命令式语言中,我更喜欢循环而不是 FP 习语。当然,有时这样的循环实际上是折叠,就像在发布的示例中一样,在这种情况下,我发现 FP 高阶折叠比fors 或累加器更优雅。当然,所有这些都只是个人喜好问题。
标签: javascript haskell underscore.js lodash ramda.js