4

Scala を使ってプログラムを作成していますが、ループの反復回数に壁にぶつかっています。関数型プログラミングと Scala でのプログラミングに関しては、私はまだかなりの初心者ですが、現時点で私が持っているものは次のとおりです。

val s = Range(1, 999999999).view.foldLeft(0)(_ + _ / whatever);

しかし、long の最大値のように、ループが 999999999 よりも数桁大きいと言うことができません。for ループを使用できることはわかっていますが、それで折り畳みオプションが表示されません。

これを達成する方法を知っている人はいますか?

ありがとう。

4

2 に答える 2

6

おわかりのように、Seqs には Int.MaxValue 要素を超える要素を含めることはできません。この機能が修正されるまでは、Seq を使用しないでください。あなたはできる

1) while ループを使用する

2)シーケンスなしで for ループを使用する

ただし、これらの方法では、例のように Scala コレクションのメソッドを使用することはできませんfoldLeft

したがって、必要なのはIterator. 例えば

def bigIterator(start: BigInt, end: BigInt, step: BigInt = 1) = 
  Iterator.iterate(start)(_ + step).takeWhile(_ <= end)

それから

bigIterator(0, BigInt("3000000000")).foldLeft(BigInt(0))(_ + _)

などが動作します。注: の全範囲を必要としない場合は、代わりに をBigInt使用してください。はるかに高速です。Long

于 2013-07-31T11:26:36.967 に答える