我有一个任务,我需要使用数据类型在SML中实现教会数字:数据类型'a church = C of('a -'a)*'a - > “一
我必须编写函数create:int - > '教堂和功能教堂 到目前为止,我有以下代码:
datatype 'a church = C of ('a -> 'a) * 'a -> 'a
val ZERO = C(fn (f,x) => x)
fun subCreate 0 (f,x) = x
| subCreate n (f,x) = f (subCreate (n-1) (f,x))
fun create n = C(fn (f,x) => subCreate n (f,x));
fun churchToInt cn = cn (fn x => x + 1) 0;
我知道我非常接近。你能帮我正确实现吗?感谢
答案 0 :(得分:2)
你是对的,你很亲密。您的churchToInt函数中只有两个小错误:
你没有拆开教堂的数字。即您将参数cn
视为函数,但churchToInt
应接受包含函数的C
,而不是函数本身。因此,将其更改为fun churchToInt (C cn) =
,通过模式匹配解压缩函数。
您正在使用curry样式向函数应用两个参数,但C
已定义为包含一个带元组的函数。因此,请写cn (fn x => x+1) 0
。
cn ((fn x => x+1), 0)
醇>
通过这两项更改,您的代码可以正常运行。