Scalaの関数型言語的な集計ロジック

val values = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val sum = values.foldLeft(0)(_ + _)

とするとsum=55となる。 foldLeftの引数が初期値。

Longにしたい場合は、

val sum = values.foldLeft(0L)(_ + _.toLong)

で、foldLeftの省略形(なのかな?)が、

val sum = (0L /: values){_ + _.toLong}

変数はイミュータブルを使い、ループで回さないのが関数型言語的だそうです。

参考にしたサイト

http://www.ne.jp/asahi/hishidama/home/tech/scala/sample/sum.html
http://d.hatena.ne.jp/Naotsugu/20100523/1274636814

 
comments powered by Disqus