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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top