如何获得教堂数字的前身

时间:2010-09-26 23:09:16

标签: sml church-encoding

我正在练习SML,我正在做一个小任务,我们必须实现教会数字定义为:

datatype 'a church = C of ('a -> 'a) * 'a  -> 'a

示例val

ZERO = C(fn (f,x) => x)

我已经实现了这些功能:

create: int -> 'a church  
churchToInt: 'a church -> int  

SUC返回教会数字的继承者。

现在我必须实现这个功能

PRED: 'a church -> 'a church * 'a church  

返回(前任,当前数字)的元组。我不被允许使用churchToInt,我应该直接使用教会数字。显然,通过传递一个特定的参数,这可以在一行中解决。

我一直在考虑一遍又一遍地使用SUC,直到我们找到正确的数字,但我无法比较2个教会的数字。我完全坚持这个。

2 个答案:

答案 0 :(得分:1)

假设你想要构造一个给你 N 的pred的函数。  你必须在数字上使用成对 像这样(0,1)(1,2)....(n,n + 1) 并构造succPair函数 从(n-1,n)到(n,n + 1) 然后在(0,1)上应用succPair N 次 最后一步,您只需对我描述的最后一个结果应用snd  然后热潮!你获得 N 的预测值 看这里得到图片http://m2-info-upmc.blogspot.fr/2012/11/predecesseur-sur-les-entiers-de-church.html

答案 1 :(得分:-2)

您必须通过subPred中的int强制它。