しつこくラムダ式について探ってみる。

Wikipediaを見ると、私が先日来よりふざけて作っていたActionやらFuncを滅多やたらと組み合わせる行為は、数学的に立派な意味があることが判明した。詳しくはカリー化 - Wikipediaを見てほしい。

カリー化というのは「引数が複数ある関数」を「引数が一つだけの関数をいっぱい組み合わせて表現する」という行為らしい。つまりこうなる。
引数4つを足して合計を返すラムダ式↓を

static void Main(string[] args)
{
    Func<int, int, int, int, int>
        func1 = (a, b, c, d) => a + b + c + d;
    Console.WriteLine(func1(2, 1, 7, 4));

    Console.ReadLine();
}

引数を一つ取るラムダ式を4回組み合わせて表現するということがカリー化らしい。こういう数学は学んだことは無かったが非常に興味深い。

static void Main(string[] args)
{
    Func<int, Func<int, Func<int, Func<int, int>>>>
        func2 = a => b => c => d => a + b + c + d;
    Console.WriteLine(func2(2)(1)(7)(4));

    Console.ReadLine();
}

Wikipediaにはカリー化を表現できる言語としてC#が入ってなかった。ラムダ式が導入されたのでこの機会に仲間入りさせてあげてほしいものだ。