Sml 如何获取教会数字的前置词

Sml 如何获取教会数字的前置词,sml,church-encoding,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 -&

我正在练习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
,直到找到正确的数字,但我无法比较这两个教堂数字。我完全无法理解这一点。

您必须通过子红色中的int强制它。

假设您要构造函数,该函数为您提供N的pred。 你必须在数字上使用配对 像这样(0,1)(1,2)…(n,n+1) 并构造
succPair
函数 从(n-1,n)到(n,n+1) 然后在(0,1)上应用
succPair
N次 最后一步是对我描述的最后一个结果应用
snd
然后砰的一声!您的pred为N
请看这里以获取图片

如果这是作业,您应该将其标记为作业