ML中的数据类型声明

时间:2013-11-20 16:18:39

标签: function types ml

我正在回顾一些我们在课堂上做过的ML转换计划,我很困惑为什么我们做了(或没有)做某事。第一个ML代码变为:

fun sub(x,y,nil) = nil
  | sub(x,y,z1::z2) = if (x = z1) then y :: sub(x,y,z2) else z1::sub(x,y,z2);

第二个成为:

datatype InputType=Null | Number of int  | Cons of InputType*InputType;

fun sub2(x,y,Null) = Null 
  | sub2(x,y,Number(z)) = if (x = z) then Number(y) else Number(z)
  | sub2(x,y,Cons(z1,z2)) = Cons(sub2(x,y,z1),sub2(x,y,z2));

据我所知,变量类型需要在整个函数中保持相同。因此,由于存在类型Null,数字和缺点,因此需要将它们组合在数据类型中。但是,有了这个逻辑,为什么第一个不需要新的数据类型?最后我查了一下,输入“Null”并输入“Cons”就不一样....

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

第一个函数只使用list类型,它在SML库中预定义为

datatype 'a list = nil | :: of 'a * 'a list

(其中::另外声明为中缀)。两种情况都是如此,真的。

另外,请注意NullCons不是类型。它们是数据构造函数,即值。