将Python转换为Haskell / λ演算

1 投票
4 回答
1807 浏览
提问于 2025-04-15 16:29

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

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

我在Lambda演算中的尝试

\x. 77 (\x.x)

4 个回答

1

我不太懂Python,所以可能理解得不太对,但这是我对Haskell的理解。

f1 = let x = 77 in show x

或者,因为你那里有一个常量

f1 = show 77
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程序。

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

撰写回答