【发布时间】:2017-10-11 16:53:38
【问题描述】:
我正在探索使用 Ruby 语言进行函数式编程。下面是我在 Ruby 中的折叠版本。我已经在各种功能、反向、过滤、映射等上对其进行了测试,它按预期返回了结果。但它会改变数据并需要赋值语句。任何人都可以帮助我做同样的事情,但又不违反功能范式吗?谁能帮我部分应用底部的咖喱函数?我怀疑我缺少一些明显的东西。谢谢。
fold_l = lambda do |ray, base, funcky|
if ray == []
base
else
base = funcky.call(base,ray.first)
ray.shift
fold_l.call(ray,base,funcky)
end
end
abc = [1, 2, 3, 4, 5, 6, 7]
mapper = lambda {|sum, x| sum << x*x}
lengthy = lambda {|sum, _| sum + 1}
p fold_l.call(abc,[],mapper) ## works fine
p abc ## but mutates data!!
abc = [1, 2, 3, 4, 5, 6, 7]
p curryFold = fold_l.curry.(abc).(0).(lengthy) ## works fine
lengthC = curryFold.(base:0).(funcky:lengthy)
p lengthC.call.(abc) ## but this gives error
【问题讨论】:
标签: ruby lambda functional-programming currying