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,数量和缺点,它们需要在数据类型中进行组合。但是,用这个逻辑,为什么第一个不需要新的数据类型?最后我检查,输入“空”,并输入“缺点”是不一样的事情....
任何帮助,将不胜感激。谢谢。
另外,'if'条件的括号是多余的。 –
啊。所以我们创建一个新的数据类型的唯一原因是因为“Number”没有被预定义(或者它?)?它必须与那些? – user2869231
没有定义'InputType'的构造函数。数据类型声明声明了类型名称及其三个构造函数名称。 –