This question在 Python 中展示了 Haskell 的 scanl
版本,但是这个函数有 Ruby 版本吗?
最佳答案
可以使用reduce()
,自己实现。
def scanl(op, init, range)
op = op.to_proc unless op.is_a?(Proc)
range.reduce([init]) { |a, e| a.push(op.call(a.last,e)) }
end
p scanl(lambda { |a, b| a + b }, 0, 1..10)
#=> [0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
p scanl(:+, 0, 1..10)
#=> [0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
或者,您可以使用 map()
并将初始元素放在数组前面。
def scanl(op, init, range)
op = op.to_proc unless op.is_a?(Proc)
acc = init
range.map { |e| acc = op.call(acc, e) }.unshift(init)
end
关于ruby - 与 Haskell 的 scanl 对应的 Ruby 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38104139/