したがって、Mが関数であるとき、(M N)の意味はあなたには明らかです。 簡単のために、同一性の場合、すなわちM = I = \ x.xを考える。 N. に減少し
(*) (\x.x) N
は今、あなたはあなたのプログラムが、もう少し一般的なようにしたいとします。 NにIDを適用するだけではなく、入力として受け取る汎用関数 fを適用します。したがって、\ x.xをfに置き換えて、 の全項w.r.tを抽象化します。 f:
\f.f N
これは\ f。(f N)と理解する必要があります。ものすごく単純。あなたは今、(*)に 用語相当を取得するために、前期に引数としてのアイデンティティを養うことができ
:物事をさらに複雑にするために
(\f.f N) \x.x = \x.x N
、あなたの入力を処理するために想像して 関数fを入力してからNにします。たとえば、バイナリの文字列が入力として期待される場合は、引数f(N、N)の "pair"にfを適用することができます。引数をNとして2回渡すことができます。
(**) \f. f N N
は\ fと理解してください。 ((f N)N)。したがって、他のアプリケーションの機能的な位置にアプリケーションがあることが明確に分かります。
前の例を見るには、アイデンティティの代わりに、K = \ x。\ y.xという用語を使用してください。 Kは2つの引数を受け取ります 広告が最初に返します。あなたは前期への入力としてKを供給した場合、一般的に
(\f.f N N) K = K N N = N
(*)と同等の用語を取得し、あなたはまだ、プログラミング言語は、抽象化を提供する方法です。 概念に関して抽象化するには、まず、 にその概念のインスタンス名を付ける必要があります。例えば、命令的言語では、変数は本質的にメモリセルの抽象化である。 関数に関して抽象化するには、関数の名前を にする必要があります。 2番目のステップでは、概念を「表現可能」にすること、すなわち は与えられた概念(ここでは新しい関数)の新しいインスタンスを動的に合成することを可能にする表現の言語を提供します。ラムダ計算は、機能が(直接的に)表現可能なコア計算です。
'x + y'はラムダ式ではないので、それは起こりません。 – melpomene
https://en.wikipedia.org/wiki/Lambda_calculus_definition#Reductionを参照してください。 Mが変数である場合、式をさらに減らすことはできません(別のベータ還元が変数を抽象で置き換えない限り)。 – melpomene