我正在回顾一些我们在课堂上做过的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”就不一样....
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
第一个函数只使用list
类型,它在SML库中预定义为
datatype 'a list = nil | :: of 'a * 'a list
(其中::
另外声明为中缀)。两种情况都是如此,真的。
另外,请注意Null
或Cons
不是类型。它们是数据构造函数,即值。