将Python转换为Haskell / λ演算
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