乱数のシーケンスを生成する問題を考えてみましょう。最終的なシーケンスは固定長n
でなければならず、前後の要素は異なる必要があります (つまり、隣接要素は異なる必要があります)。私の最初の慣用的なアプローチは次のようなものです。
val seq = Stream.continually{ Random.nextInt(10) }
.foldLeft(Stream[Int]()){ (all: Stream[Int], next: Int) =>
if (all.length > 0 && all.last != next)
all :+ next
else
all
}
.take(n)
残念ながら、foldLeft は無限ストリーム全体を消費しようとするため、これは機能しません。その結果、無限ループが発生します。直感的に、この質問によれば、この動作はfoldRight
? たぶん、私は別の慣用的な解決策を見逃していますか?