And*_*imm 16 ruby infinity lazy-sequences
在做项目euler#2的更多ruby方式中,部分代码是
while((v = fib(i)) < 4_000_000)
s+=v if v%2==0
i+=1
end
Run Code Online (Sandbox Code Playgroud)
有没有办法改变i += 1成更具功能性的编程风格结构?
我能想到的最好的是
Float::MAX.to_i.times do |i|
v = fib(i)
break unless v < 4_000_000
s += v if v%2==0
end
Run Code Online (Sandbox Code Playgroud)
因为你不能调用.times浮点数.
ste*_*lag 16
Numeric.step的默认参数为无穷大(限制)和1(步长).
1.step do |i|
#...
end
Run Code Online (Sandbox Code Playgroud)
为了好玩,您甚至可以尝试一下
1.step.size
Run Code Online (Sandbox Code Playgroud)
Jos*_*Lee 10
有一个预定义的(在1.9.2中)常量Float::INFINITY,所以你可以写
1.upto(Float::INFINITY) do |i|
...
end
Run Code Online (Sandbox Code Playgroud)
(您也可以使用Enumerator和take_while,将问题内部化,使其看起来更像Haskell或Python,但是take_while贪婪并构建一个数组.)
| 归档时间: |
|
| 查看次数: |
6603 次 |
| 最近记录: |