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

{% codeblock lang:scala %} val values = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val sum = values.foldLeft(0)(_ + _) {% endcodeblock %} とするとsum=55となる。 foldLeftの引数が初期値。


Longにしたい場合は、 {% codeblock lang:scala %} val sum = values.foldLeft(0L)(_ + _.toLong) {% endcodeblock %}


で、foldLeftの省略形(なのかな?)が、 {% codeblock lang:scala %} val sum = (0L /: values){_ + _.toLong} {% endcodeblock %}


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

参考にしたサイト ↓ http://www.ne.jp/asahi/hishidama/home/tech/scala/sample/sum.html http://d.hatena.ne.jp/Naotsugu/20100523/1274636814

 
comments powered by Disqus