Yコンビネータの定義: def Y[A,B]( f:((A => B), A ) => B, x:A ):B = f( ( y:A ) => Y( f,y ),x ) Yコンビネータってのは、要は Y(f) = f(Y(f))となる関数らしい。不動点演算子とか呼ばれていますがなんのことかわかりませんね。 「ある関数fをYに与えた結果できる関数をf'とすると、f'をまたYに与えてできる関数はfと同じ」になるように関数を作り出すものです。 何でこんなもん必要なの? ある無名関数があるとしましょう。この無名関数は名前が定義されていないため、自身を再帰で呼び出す定義ができません。 単純に、0から引数nまで加算する関数を無名関数で定義しようとすると、 (i:Int) => i match{ case 0 => 0 case _ => i + ここで自分自身を再帰で呼びたいけど名前がない( i - 1