Haskellとラムダ計算のPythonコードは何ですか?
def f1():
x = 77
def f2():
print x
f2
f1
ラムダ計算での私の試み
\x. 77 (\x.x)
Haskellとラムダ計算のPythonコードは何ですか?
def f1():
x = 77
def f2():
print x
f2
f1
ラムダ計算での私の試み
\x. 77 (\x.x)
Haskellの場合:
f1 = f2
where x = 77
f2 = print x
IOは問題を混乱させるだけなので、リファクタリング:
f1 = f2
where x = 77
f2 = x
リファクタリング:
f1 = x
where x = 77
変数が必要なので、リファクタリングしますか?
f1 = (\x -> x) 77
ベータ削減:
f1 = 77
そして、あなたはHaskellにあなたのプログラムを持っています。
ラムダ計算には(Haskellとは異なり)数値リテラルがないため、チャーチ数値を使用する必要があります。したがって、「77」をラムダ計算にコンパイルします。
f1 = \f.\x. f (f (f (f ( ... ) x)))
そして、ラムダ計算にPythonプログラムがあります。
Haskell:
f1 :: IO ()
f1 = let x = 77
f2 = print x
in f2
main :: IO ()
main = f1
または、ラムダ計算のようになります。
f1 :: Int
f1 = let f2 = x
x = 77
in f2
main :: IO ()
main = print f1
私はPythonを知らないので、完全に間違っている可能性がありますが、これは私のHaskellの解釈です。
f1 = let x = 77 in show x
または、そこに定数があるので
f1 = show 77
ラムダ計算では:
λprint. print 77