質問

HaskellおよびLambda計算のPythonコードは何ですか?

def f1():
   x = 77
   def f2():
      print x
   f2
f1

ラムダ計算における私の試み

\x. 77 (\x.x)
役に立ちましたか?

解決

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

他のヒント

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)))

そして、Lambda CalculusにPythonプログラムがあります。

Pythonを知らないので、完全に間違っている可能性がありますが、これは私のHaskellの解釈です。

f1 = let x = 77 in show x

または、そこに定数があるので

f1 = show 77

ラムダ計算の場合:

λprint. print 77
scroll top