Ответ 1
Numeric.step имеет параметры бесконечности (предел) и 1 (размер шага).
1.step do |i|
#...
end
Для удовольствия вы можете даже попробовать
1.step.size
В больше рубинового способа выполнения проекта euler # 2, часть кода
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
по числу с плавающей запятой.
Numeric.step имеет параметры бесконечности (предел) и 1 (размер шага).
1.step do |i|
#...
end
Для удовольствия вы можете даже попробовать
1.step.size
Theres предопределенная (в 1.9.2) константа Float::INFINITY
, поэтому вы можете написать
1.upto(Float::INFINITY) do |i|
...
end
(Вы также можете использовать Enumerator
и take_while
, превращая проблему наизнанку, чтобы она больше напоминала Haskell или Python, но take_while
жадный и строит массив.)