5

是否可以在不使用诸如 add1 之类的语言原语的情况下将教堂数字转换为整数表示?

我遇到的所有示例都使用原语 dechuch to int

例子:

 plus1 = lambda x: x + 1
 church2int = lambda n: n(plus1)(0)

示例 2:

 (define (church-numeral->int cn)
    ((cn add1) 0))

我正在尝试使用微型 lisp 解释器(仅使用 John McCarthy 的 10 条规则),并且想了解是否可以在不添加原语的情况下做到这一点。

4

2 回答 2

2

整数类型不属于 McCarthy 的 Lisp 基本原始过程列表的一部分 - 您只有该级别的函数,不存在其他数据类型。如果我们要严格遵守 Lisp 的这种简约定义,这就是为什么整数需要表示为函数(例如,使用 Church 数字)的原因。所以答案是否定的。您无法转换为尚不存在的数据类型。

现在假设我们在语言中添加整数作为原子(请注意,向语言中添加新数据类型超出了提到的 7-10 个原始过程)。为了进一步简化,假设我们只添加一个数字,即数字零 - 那么我们仍然需要根据Peano 公理add1来构建其余整数的操作,这需要存在自然的后继操作存在的数字。同样,如果没有数字零作为原子和函数,我们就不能从 Church 数字转换为整数。add1

于 2013-04-03T17:11:17.370 回答
1

int,正如您所描述的,它是原始类型的值,而不是函数。如果没有原语,您根本无法操作这样int的 s(没有add1,您将如何到达1from 0?)。

但是,您当然可以在不使用原语的情况下在两种不同的自然数 Church 编码之间进行转换,只要您的语言在没有这些原语的情况下是图灵完备的。

于 2013-04-03T16:58:12.463 回答