SML和教堂数字

时间:2010-09-24 01:19:37

标签: sml

我有一个任务,我需要使用数据类型在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;

我知道我非常接近。你能帮我正确实现吗?感谢

1 个答案:

答案 0 :(得分:2)

你是对的,你很亲密。您的churchToInt函数中只有两个小错误:

  1. 你没有拆开教堂的数字。即您将参数cn视为函数,但churchToInt应接受包含函数的C ,而不是函数本身。因此,将其更改为fun churchToInt (C cn) =,通过模式匹配解压缩函数。

  2. 您正在使用curry样式向函数应用两个参数,但C已定义为包含一个带元组的函数。因此,请写cn (fn x => x+1) 0

  3. 而不是cn ((fn x => x+1), 0)

    通过这两项更改,您的代码可以正常运行。