教会编码的目的是什么?

Mat*_*Mut 2 lambda-calculus church-encoding

最近我在阅读关于 Lambda 演算和 Church Encoding 的文章,虽然我对它们的含义形成了远程理解,但我很难找到使用高阶函数来表示数值或列表而不是直接使用数值或列表的目的.

在编程中,在 Church-Encoded 表达式上执行 Lambda 演算对机器资源来说是极其繁重的,而且似乎是一种效率低得多的技术。我发现程序员通常认为这是糟糕的编程实践,除了 Scheme 或 Haskell 程序员,出于奇怪的原因。

使用 Church 编码有什么实际的实际原因吗?还是只对理论学习有用?

Cac*_*tus 5

对(正式)语言的分析在技术上变得越小越简单。例如,如果您可以将数据类型表示为函数(这是 Church 编码为您提供的),那么您不需要将数据类型添加到您的语言中,只是为了能够检查如何操作其中的数据。

对于实用的编程语言,是的,您最常添加定制的数据类型支持;但是您仍然可以通过将它们简化为函数然后仅使用较小的无数据类型语言的语义来定义它们的语义。

  • 它很有用,原因与您不向数学理论添加冗余公理的原因相同。 (3认同)