ラムダ計算のリスト要素の合計とリストの長さを計算するための関数を作成しようとしています。リストの
例:a := [1, 2, 3] = λcn.c 1 (c 2 (c 3 n))
sum a
6を返す必要がありますし、len a
私は再帰的なバージョンを書いた3ラムダ計算のリスト要素の合計とリストの長さ
返す必要があります:
、空、プラス、テールは他のラムダ関数であればlen = λl.if (empty l) 0 (plus 1 (len (tail l)))
sum = λl.if (empty l) 0 (plus (head l) (sum (tail l)))
。
len = λl.if (empty l) 0 (plus 1 (len (tail l)))
len = λfl.if (empty l) 0 (plus 1 (f (tail l))) len
len = Y λfl.if (empty l) 0 (plus 1 (f (tail l)))
Y = λf.(λx.f(x x))(λx.f(x x))
合計のためだけに同じ:
は、それから私は、不動点コンビネータといくつかのトリックをしました。だから私は非再帰的なバージョンがあります。しかし、ベータ版を使用してベータ版を得ることはできません。
これらの関数のベータ正規形がどのように見えるのだろうかと思います。
に展開することになる
、 '2'、 '3'、など、これらの教会の数字を表現するために意図されています ' λf.λx.fx'、 'λf.λx.f(fx)'、 'λf.λx.f(f(fx))'など? – naomik
@naomikはい、正確に – Some
gallaisはあなたに完璧な答えを提供します – naomik