0

我为多列表定义了一个数据类型: datatype intnest= INT of int | LIST of intnest list; 现在我正在尝试编写可以将此类型转换为主要类型的函数。

例如: [INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]] 我该怎么做?提前感谢您的帮助

4

1 回答 1

1

参考您之前的问题,您不能!

正如我试图解释的那样:在 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

于 2013-04-05T12:31:54.663 回答