我有一个涉及在 SML 中制作教堂数字的作业。我环顾四周,找不到我做错了什么。目标是制作一个接受 int 并返回教堂数字的函数,定义为数据类型 'a numeric = Num of ('a -> 'a) -> 'a -> 'a (由我的老师预定义) . 然后创建第二个函数,它接受一个教堂数字并返回一个 int。
我看到之前的帖子有代码:
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 (c, cn) = cn ((fn x => x+1), 0) 0;
但这不起作用,并且由于值限制而将错误类型 var 实例化为虚拟类型。
当我使用代码时:
val zero = fn s => fn x => x;
(定义零)然后
val next = fn n => fn s => fn x => (f ((n s) x));
(只是在设置迭代或递归函数之前进行测试以查看是否可以增加零),我得到了同样的错误。我在这个问题上花了几个小时,无法产生一个教堂数字。有人可以指出我正确的方向吗?