functional-programming - 哪种 FP 语言最接近 lambda 演算?

标签 functional-programming lambda-calculus

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




9年前关闭。




哪种 FP 语言在代码外观、感觉和行为方面与 lambda 演算最接近,就像 lambda 演算抽象一样?

最佳答案

这可能不是一个真正的答案,它更多的是对你真正想要什么的猜测。

一般来说,lambda 演算中几乎没有什么——你基本上需要(一等)函数、函数应用程序和变量。这些天来,您将很难找到一种不为您提供这些东西的语言……但是,当您尝试学习它时,事情可能会变得困惑-例如,仅使用纯数字就很容易然后把它们和教堂数字混在一起。 (我已经看到很多学生都发生过这种情况,适应这种 Material 所需的正式思维已经够难了,以至于将编码扔到一堆并没有真正帮助......)

正如 Don 所说,Scheme 非常接近于“普通”的无类型 lambda 演算,如果您正在阅读 The Little Schemer,它可能非常适合您的情况。如果你真的想使用一个“合适的”LC,你需要确保你只使用函数(问题如上);但是您会遇到一些额外的问题,尤其是当您阅读有关该主题的各种其他文本时。首先,大多数文本将使用您在 Scheme 中没有的惰性求值。其次,由于 LC 只有一元函数,因此缩短术语和使用非常普遍,例如,λxyz.zxy而不是“真实”形式,在这种情况下是 λx.(λy.(λz.((z x) y)))(lambda (x) (lambda (y) (lambda (z) ((z x) y))))在方案中。 (这称为 Currying。)

所以是的,Scheme 非常接近 LC,但对于所有这些问题来说,这并没有什么意义。 Haskell 可以说是一个更好的候选者,因为它既懒惰,又对函数的多个参数进行这种柯里化(Currying)。 OTOH,你正在处理一种类型化的语言,这是一个相当大的包袱带入这个游戏——如果你尝试做 TLS 风格的例子,你会陷入一些严重的泥潭......

如果你确实想得到所有东西(懒惰、速记、无类型、足够接近 Scheme),那么 Racket还有一点需要考虑。在高层次上,它与 Scheme 非常接近,但它更进一步,因为您可以快速将 Racket 语言限制为 lambda 的语言。表达式和函数应用。做更多的工作,你也可以让它做 curry ,你甚至可以让它变得懒惰。这不是你现在应该尝试自己做的练习——但如果这听起来像你想要的,那么我可以给你指点my course。 (在类笔记中查找“Schlac”)我们使用的语言可以完成上述所有操作,并且它受到极大限制,因此您得到的只是基本的 LC 结构。 (例如,3 在您定义它之前是一个未绑定(bind)的标识符。)请注意,这不是一些解释器——它被编译成 Racket 代码,这意味着它运行得足够快,您甚至可以编写使用数字的代码。你也可以在那里获得该语言的实现,一旦你安装了它,如果你以 #lang pl schlac 开始文件,你就会得到这种语言。 .

关于functional-programming - 哪种 FP 语言最接近 lambda 演算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10637670/

相关文章:

clojure 如何知道一个项目中文件夹/文件/目录的路径?

list - 常用 lisp 函数中的表达式和算术

haskell - 为什么这个 lambda 演算缩减器不将 succ 0 缩减为 1?

haskell - 是否可以用 Haskell 或任何其他语言编写一个或多个仅表示封闭术语的数据结构?

c++ - 如何将函数的 y→λx.yx 'lifting' 执行为仿函数?

functional-programming - 在 Agda 中编写证明

functional-programming - D中的纯函数式编程

functional-programming - 在 Lua 中调用作为参数传递的函数

algorithm - Haskell 算法找到所有可能的 Beta 约简

具有自定义类型的 Haskell Church 数字