Скажем, у меня есть функция, например старая любимая
def factorial(n:Int) = (BigInt(1) /: (1 to n)) (_*_)
Теперь я хочу найти наибольшее значение n
, для которого factorial(n)
подходит для Long. Я мог бы сделать
(1 to 100) takeWhile (factorial(_) <= Long.MaxValue) last
Это работает, но 100 - произвольное большое число; то, что я действительно хочу с левой стороны, - это бесконечный поток, который продолжает генерировать более высокие числа, пока не будет выполнено условие takeWhile
.
Я придумал
val s = Stream.continually(1).zipWithIndex.map(p => p._1 + p._2)
но есть ли лучший способ?
(Я также знаю, что я мог бы получить решение рекурсивно, но это не то, что я ищу.)