無名関数
書式はこんな感じ。
(x1: T1, ..., xn: Tn) => E
これは、以下と等しい。
{ def f (x1: T1, ..., xn: Tn) = E ; f _ }
うむ。すっきり。
カリー化
ここでなんだか残念な事態が判明する。
書式はこんな感じ。
(x1: T1, ..., xn: Tn) => E
これは、以下と等しい。
{ def f (x1: T1, ..., xn: Tn) = E ; f _ }
うむ。すっきり。
カリー化
ここでなんだか残念な事態が判明する。
def sum(f: Int => Int, a: Int, b: Int): Int =この高階関数をカリー化する際には、sumを
if (a > b) 0 else f(a) + sum(f, a + 1, b)
def sumInts(a: Int, b: Int): Int = sum((x: Int) => x, a, b)
def sumSquares(a: Int, b: Int): Int = sum((x: Int) => x * x, a, b)
def sum(f: Int => Int): (Int, Int) => Int = {こんな風に書き換えた上で、呼び出し時には
if (a > b) 0 else f(a) + sum(f)(a + 1, b)
}
def sumInts = sum(x => x) _とか
def sumSquares = sum(x => x * x) _
val sumInts = sum(x => x) _とか書かなければならないらしい。なんということだ。これじゃ、カリー化したい組み合わせが変わるごとに別々に定義が必要じゃないか。いけてない…。しかも、呼び出し時によくわからん「_」をつけなければならないとは…。これが静的言語の宿命なのか?残念だ。
val sumSquares = sum(x => x * x) _
コメント