如何转换我的数据类型?

时间:2013-04-05 08:56:26

标签: functional-programming sml smlnj ml

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

例如: [INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]] 我怎样才能做到这一点? 提前感谢您的帮助

1 个答案:

答案 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

等效