2013-11-20 66 views
0

我在回顾一下我们在课堂上做过的一些Scheme到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,数量和缺点,它们需要在数据类型中进行组合。但是,用这个逻辑,为什么第一个不需要新的数据类型?最后我检查,输入“空”,并输入“缺点”是不一样的事情....

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

回答

1

第一功能只需使用list类型,其在SML库预定义为

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

(其中::附加声明为缀)。在这两种情况下,情况也是如此,真的。

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

+0

另外,'if'条件的括号是多余的。 –

+0

啊。所以我们创建一个新的数据类型的唯一原因是因为“Number”没有被预定义(或者它?)?它必须与那些? – user2869231

+0

没有定义'InputType'的构造函数。数据类型声明声明了类型名称及其三个构造函数名称。 –