1

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

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

我在 lambda 演算中的尝试

\x. 77 (\x.x)
4

4 回答 4

8

在哈斯克尔:

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 程序。

于 2010-06-13T22:01:05.923 回答
3

哈斯克尔:

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
于 2009-11-28T23:07:59.497 回答
1

我不知道 python,所以我可能完全错了,但这是我的 Haskell 解释。

f1 = let x = 77 in show x

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

f1 = show 77
于 2009-11-28T23:15:27.790 回答
1

在 lambda 演算中:

λprint. print 77
于 2009-11-29T07:02:10.430 回答