プレースホルダー
無名関数で引数を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)