ScalaでProject Euler(6)

Problem 2

プレースホルダ

無名関数で引数を1回しか使わないとき、引数を省略できます。

(n) => n % 2 == 0

これは、

_ % 2 == 0

こう書けます。_をプレースホルダーというらしいです。そして、

(n) => n < N

は、

_ < N

と書けます。実はこの場合プレースホルダーすら書かずに済みます。

N >

>は実はNのメソッドで、

N > m

N.>(m)

と書けるのですが、引数が一つの関数は引数を省略できるので、

N.>

と書けて、これと同じ意味で

N >

となります。まとめると、

import Stream.cons

val fib : Stream[Int] = cons(1, cons(1,
                        fib.zip(fib.tail).map((f) => f._1 + f._2)))

val N = 4000000
print (fib takeWhile(N >) filter(_ % 2 == 0) sum)