将Python转换为Haskell/Lambda演算

Léo*_* 준영 1 python lambda haskell lambda-calculus

Haskell和Lambda演算中的Python代码是什么?

def f1():
   x = 77
   def f2():
      print x
   f2
f1
Run Code Online (Sandbox Code Playgroud)

我在lambda演算中的尝试

\x. 77 (\x.x)
Run Code Online (Sandbox Code Playgroud)

Don*_*art 8

在Haskell:

f1 = f2
    where x  = 77
          f2 = print x
Run Code Online (Sandbox Code Playgroud)

重构,因为IO只会混淆问题:

f1 = f2
    where x  = 77
          f2 = x
Run Code Online (Sandbox Code Playgroud)

重构:

f1 = x
    where x = 77
Run Code Online (Sandbox Code Playgroud)

重构,因为你想要变量?

f1 = (\x -> x) 77
Run Code Online (Sandbox Code Playgroud)

Beta降低:

f1 = 77
Run Code Online (Sandbox Code Playgroud)

你在Haskell有自己的程序.

Lambda演算没有数字文字(与Haskell不同),所以我们必须使用教会数字.因此编译"77"到lambda演算:

f1 = \f.\x. f (f (f (f ( ... ) x)))
Run Code Online (Sandbox Code Playgroud)

还有Lambda Calculus中的Python程序.

  • 我想我们可以把它优化成`(\三.(\.七.(\十.\ f.\ x.ten(七个f)(七个fx))(\ f.\ x.three f(七个fx)) )(\ f.\ xf(三个f(三个fx))))(\ f.\ xf(f(fx)))`. (2认同)