教会编码的目的是什么?

What is the purpose of Church Encoding?

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

在编程中,对 Church-Encoded 表达式执行 Lambda 演算会极大地消耗机器的资源,并且似乎是一种效率低下的技术。我发现程序员通常认为它是糟糕的编程习惯,除了 Scheme 或 Haskell 程序员,出于奇怪的原因。

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

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

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