関数型プログラミングのためのラムダ計算
-
12-09-2019 - |
質問
ラムダ計算において(λX。λのY。λS。λZ、X秒(Y S、Z))がどのように我々はこれを説明することができる2つの教会の数字の加算のために使用される、任意の良いリソースは関数型プログラミングのためのラムダ計算ありますか?あなたの助けがはるかに高く評価される。
解決
実際にλF1。 λF2。 λsの。 λZ。それは(S F2 z)を置換する効果であるため(F1 S(S F2 Z))加算を計算し、数が "ゼロ" の内側(S F1 Z)に、F2で表される。
例:のは、F2のための2つ、展開された形でs s z
を見てみましょう。 s z
:f1は1です。 F2によってその最後のz
を交換し、あなたがs s s z
、3のための拡張形式を取得します。
このは申し訳ありませんが、黒板と手を振って容易になるだろう。
他のヒント
ラムダ計算では、あなたはそれが誘導操作の面でデータ型をコーディングします。
:例えば、ブール入力二つの値AおよびBを取り込み、またはbのいずれかを返すだけ選択関数であります true = \a,b.a false = \a,b.b
自然数の使用は何ですか?その主な目的は、計算にあります 反復に結合を提供しています。そこで、我々は、オペレーターとして自然数をコーディング すなわち、入力に関数f、値xをとり、そしてアプリケーションを繰り返します n倍のX上のF:
n = \f,x.f(f(....(f x)...))
Fのn個の出現である。
さて、あなたはxから始まるF N + m回機能を反復する場合 あなたは、それは(n F x)をn回繰り返しを開始し、その後、Mのために反復しなければなりません 追加回、前の結果から始めて、それは
m f (n f x)
あなたはn * m回の反復処理したい場合は、同様に、m回反復する必要があります (2つの入れ子ループ内など)反復n回Fの動作は、つまり
m (n f) x
データ型の前符号化は、より正式用語で説明されています コンストラクタと対応エリミネーターの(いわゆる ボーム-Berarducciエンコーディング)。