1

Haskellとラムダ計算のPythonコードは何ですか?

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

ラムダ計算での私の試み

\x. 77 (\x.x)
4

4 に答える 4

8

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プログラムがあります。

于 2010-06-13T22:01:05.923 に答える
3

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
于 2009-11-28T23:07:59.497 に答える
1

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

f1 = let x = 77 in show x

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

f1 = show 77
于 2009-11-28T23:15:27.790 に答える
1

ラムダ計算では:

λprint. print 77
于 2009-11-29T07:02:10.430 に答える