哪种FP语言跟随lambda演算最接近?

mel*_*sul 4 functional-programming lambda-calculus

哪个FP语言遵循lambda演算最接近其代码的外观,感觉,就像lambda演算抽象一样?

Eli*_*lay 5

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

一般来说,lambda演算中几乎没有 - 你基本上需要(第一类)函数,函数应用程序和变量.这些天你很难找到一种不能为你提供这些东西的语言...但是,当你试图了解它时,事情会变得混乱 - 例如,使用普通数字很容易然后让他们与教堂数字混在一起.(我已经看到这种情况发生在许多学生身上,适应了这种材料所需要的正式思维,这对于将编码扔到桩上并没有真正帮助......)

正如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))))在Scheme中.(这叫做Currying.)

所以,是的,Scheme与LC非常接近,但对于所有这些问题并没有多说.Haskell可以说是一个更好的候选者,因为它既懒惰又可以用于函数的多个参数.OTOH,你正在处理一种类型化的语言,这是一个非常重要的行李带入这个游戏 - 如果你尝试做TLS风格的例子,你会遇到一些严重的问题......

如果你想获得所有东西(懒惰,短途,无类型,足够接近Scheme),那么Racket还有另外一点需要考虑.在高级别,它与Scheme非常接近,但它可以更快地将一种限制了Racket语言的语言用于lambda表达式和函数应用程序.通过一些更多的工作,你也可以让它做到currying,你甚至可以使它变得懒惰.这不是一个你应该尝试自己做的练习 - 但如果它听起来像你想要的那样,那么我可以指向你的课程(在课堂笔记中寻找"Schlac")我们使用的语言正在做上述所有事情,并且它受到极大的限制,所以你只能获得基本的LC结构.(例如,3定义它之前是一个未绑定的标识符.)请注意,这不是一些解释器 - 它被编译成Racket代码,这意味着它运行得足够快,甚至可以编写使用数字的代码.您也可以在那里获得该语言的实现,一旦安装了该语言,如果您启动文件,则会获得该语言#lang pl schlac.