将Python转换为Haskell / Lambda演算
-
06-07-2019 - |
题
Haskell和Lambda演算中的Python代码是什么?
def f1():
x = 77
def f2():
print x
f2
f1
我在lambda演算中的尝试
\x. 77 (\x.x)
解决方案
Haskell中:
f1 :: IO ()
f1 = let x = 77
f2 = print x
in f2
main :: IO ()
main = f1
或者更像是你的lambda演算:
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
Beta缩小:
f1 = 77
你在Haskell有你的程序。
Lambda演算没有数字文字(与Haskell不同),所以我们必须使用教会数字。 所以编译“77”到lambda演算:
f1 = \f.\x. f (f (f (f ( ... ) x)))
还有Lambda Calculus中的Python程序。
我不知道python,所以我可能完全错了,但这是我对Haskell的解释。
f1 = let x = 77 in show x
或者,因为那里有一个常数
f1 = show 77
在lambda演算中:
λprint. print 77
不隶属于 StackOverflow