foldM
のFoldable
をcats
で理解しようとしています。リスト内の数字を合計する必要があるとします。実行中の合計が正で、そうでないときに中断する必要があるとします。foldM of Foldableの使い方は?
val sumUp: (Int, Int) => Option[Int] = (x, y) => {
println(s"x = $x, y = $y")
val sum = x + y
if (sum > 0) Some(sum) else None
}
scala> val xs = List(1, 2, 3, -2, -5, 1, 2, 3)
xs: List[Int] = List(1, 2, 3, -2, -5, 1, 2, 3)
scala> Foldable[Stream].foldM(xs.toStream, 0)(sumUp)
x = 0, y = 1
x = 1, y = 2
x = 3, y = 3
x = 6, y = -2
x = 4, y = -5
res27: Option[Int] = None
今私は、実行中の合計は= 0 <になり、foldM
休憩場所を開始し、入力ストリームの尾を、取得するために新しい機能sumUp2
を記述する必要があります。 sumUp2
を書くためにどのように
scala> val tail = Foldable[Stream].foldM(xs.toStream, 0)(sumUp2)
tail: Stream[Int] = Stream(-5, ?)
scala>tail.toList
res28: List[Int] = List(-5, 1, 2, 3)
:たとえば、私はこのような何かを取得する必要がありますか?
残念ながら、 'sumUp2'が' xs'の_all_要素に対して呼び出されていますが、実行中の合計が<= 0のときにfuctionの呼び出しを停止したいと思います。どうもありがとうございました。 – Michael