我正在练习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个教会的数字。我完全坚持这个。
答案 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强制它。