我为多列表定义数据类型:
datatype intnest= INT of int
| LIST of intnest list;
现在我正在尝试编写可以将此类型转换为主类型的函数。
例如:
[INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]]
我怎样才能做到这一点?
提前感谢您的帮助
答案 0 :(得分:1)
参考your previous question,你不能!
正如我试图解释的那样:在SML中不可能有这样的值!
只需在口译员中尝试一下
- val _ = [1,2, [6,8]];
stdIn:28.9-28.21 Error: operator and operand don't agree [literal]
operator domain: int * int list
operand: int * int list list
in expression:
2 :: (6 :: 8 :: nil) :: nil
如果我们使用基本结构而不是语法糖来构造列表,那么列表[1,2,3]
将变为1 :: 2 :: 3 :: nil
现在,如果我们看一下两个“积木”的类型和缺点
- op::;
val it = fn : 'a * 'a list -> 'a list
- nil;
val it = [] : 'a list
然后我们看到中缀运算符缺点,左侧是'a
类型的参数,右侧是'a
列表。
因此,我们可以看到,如果我们构建一个int列表,那么我们必须在左侧给它一个int,在右侧给它一个int列表(如上例所示)。应该清楚的是,我们不能这样做:
[1, 2] :: 3 :: nil
与(1 :: 2 :: nil) :: 3 :: nil