我为多列表定义了一个数据类型:
datatype intnest= INT of int
| LIST of intnest list;
现在我正在尝试编写可以将此类型转换为主要类型的函数。
例如:
[INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]]
我该怎么做?提前感谢您的帮助
我为多列表定义了一个数据类型:
datatype intnest= INT of int
| LIST of intnest list;
现在我正在尝试编写可以将此类型转换为主要类型的函数。
例如:
[INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]]
我该怎么做?提前感谢您的帮助
参考您之前的问题,您不能!
正如我试图解释的那样:在 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
现在,如果我们看一下两个“构建块”的类型 cons 和 nil
- op::;
val it = fn : 'a * 'a list -> 'a list
- nil;
val it = [] : 'a list
然后我们看到中缀运算符 cons,'a
在左侧接受一个类型的参数,'a
在右侧接受一个列表。
因此我们可以看到,如果我们构建一个 int 列表,那么我们必须在左侧给它一个 int,在右侧给它一个 int 列表(如上面的示例)。从这里应该很清楚,我们不能做这样的事情:
[1, 2] :: 3 :: nil
这相当于(1 :: 2 :: nil) :: 3 :: nil