将 Python 转换为 Haskell / Lambda 演算

发布于 2024-08-13 01:00:31 字数 207 浏览 8 评论 0原文

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

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

我在 lambda 演算方面的尝试

\x. 77 (\x.x)

What is the Python code in Haskell and Lambda calculus?

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

My attempt in lambda calculus

\x. 77 (\x.x)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

窗影残 2024-08-20 01:00:31

在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 演算中的 Python 程序。

In Haskell:

f1 = f2
    where x  = 77
          f2 = print x

Refactoring, since IO just confuses the issue:

f1 = f2
    where x  = 77
          f2 = x

Refactoring:

f1 = x
    where x = 77

Refactoring, since you want the variable?

f1 = (\x -> x) 77

Beta reduce:

f1 = 77

And you have your program in Haskell.

Lambda calculus doesn't have numeric literals (unlike Haskell), so we must use Church numerals.
So compiling "77" to lambda calculus:

f1 = \f.\x. f (f (f (f ( ... ) x)))

And there's your Python program in Lambda Calculus.

心在旅行 2024-08-20 01:00:31

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 :: IO ()
f1 = let x = 77
         f2 = print x
     in f2

main :: IO ()
main = f1

Or to be more like your lambda calculus:

f1 :: Int
f1 = let f2 = x
         x = 77
     in f2

main :: IO ()
main = print f1
甜嗑 2024-08-20 01:00:31

我不懂Python,所以我可能是完全错误的,但这是我的Haskell 解释。

f1 = let x = 77 in show x

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

f1 = show 77

I don't know python, so I could be completely wrong, but this is my Haskell interpretation.

f1 = let x = 77 in show x

Or, since you've got a constant there

f1 = show 77
贱贱哒 2024-08-20 01:00:31

在 lambda 演算中:

λprint. print 77

In lambda calculus:

λprint. print 77
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文