Haskell 和 Lambda 演算中的 Python 代码是什么?
def f1():
x = 77
def f2():
print x
f2
f1
我在 lambda 演算中的尝试
\x. 77 (\x.x)
Haskell 和 Lambda 演算中的 Python 代码是什么?
def f1():
x = 77
def f2():
print x
f2
f1
我在 lambda 演算中的尝试
\x. 77 (\x.x)
在哈斯克尔:
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 不同),因此我们必须使用Church 数字。因此将“77”编译为 lambda 演算:
f1 = \f.\x. f (f (f (f ( ... ) x)))
Lambda Calculus 中有你的 Python 程序。
哈斯克尔:
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
我不知道 python,所以我可能完全错了,但这是我的 Haskell 解释。
f1 = let x = 77 in show x
或者,因为你在那里有一个常数
f1 = show 77
在 lambda 演算中:
λprint. print 77