16

プロジェクト euler #2 を実行するより Ruby の方法では、コードの一部は次のとおりです。

while((v = fib(i)) < 4_000_000)
  s+=v if v%2==0
  i+=1
end

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

.times浮動小数点数を呼び出すことができないためです。

4

3 に答える 3

11

定義済みの (1.9.2) 定数Float::INFINITYがあるので、次のように書くことができます

1.upto(Float::INFINITY) do |i|
  ...
end

( and を使用Enumeratortake_whileて、問題を裏返しにして Haskell や Python のように見せることもできますがtake_while、貪欲で配列を構築します。)

于 2012-02-29T23:12:54.117 に答える