ラムダ計算とラムダ式とC#

あまり厳密ではないけど、ざっくり書いてみる。

計算理論

  • 「計算」を数学的に厳密に定義することで、「計算」に何ができて何ができないのかを解き明かす理論。

ラムダ計算

  • 計算理論で使われる1つのモデル。
  • ラムダ式(≒1引数無名高階関数の定義)と簡約(≒関数が返す値の評価)ですべての計算を表現できるというもの。
  • 複数の引数を持つ関数はカリー化によって1引数関数として扱われる。
  • ラムダ式ラムダ式を受け取ったりラムダ式を返したりできないと、理論が成立しない。
  • 型のないラムダ計算と、型付きラムダ計算の両方が研究されている。

関数型言語

  • ラムダ計算を理論的基盤としたプログラミング言語
  • ラムダ式という名前の無名関数を記述できる。たいてい複数の引数を持つラムダ式を定義できるが、常にカリー化されるかどうかは言語による。
  • すべてをラムダ式で扱うのは冗長だし効率も悪いので、関数や変数やリテラルなど、ラムダ式以外の要素も使うことができる。
  • とはいえ、ラムダ式に限らず、ほとんどあらゆるものが式である。
  • あらゆるものが式なので、returnが不要。
  • 式を組み合わせることで計算手順を記述する。gotoが不要。
  • 高階関数(引数や戻り値として関数を扱う関数)を使ってプログラムを書くのが普通。
  • プログラムの実行は式の評価とほぼ同義。

C#VB.NETラムダ式

  • 関数型言語ラムダ式を参考にして取り込んだ、匿名メソッドを簡易に定義する機能。(式木も定義できるけど、そこは省略)
  • カリー化はない。
  • 式として記述するならreturnを書かなくても値を返せる。
  • 関数型言語を参考にしたLINQで活躍。
  • 引数としてデリゲートを受け取るメソッドに渡すのに便利。そのようなメソッドは高階関数とみなせるが、それを意識する必要はほとんどない。