【问题标题】:How can I convert my data type?如何转换我的数据类型?
【发布时间】:2013-04-05 20:40:22
【问题描述】:

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

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

【问题讨论】:

  • 这基本上是your previous question的复制品,特别是我们在cmets中讨论的内容。
  • 是的,但我定义了一个转换它的函数,但只是将类型 INT 转换为 int 我无法处理其他类型 LIST
  • 其实我只是想在输出中手动显示,没有别的。

标签: functional-programming sml smlnj ml


【解决方案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

现在,如果我们看一下两个“构建​​块”的类型 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

【讨论】:

  • ` 数据类型 intnest = INT of int |利益清单清单; fun tagged2s (INT i) = valOf(Int.fromString (Int.toString i)) 映射 tagged2s [INT 1,INT 4]; `
  • 结果:val it = [1,4] : int list 但我不知道如何为类型列表完成这项工作。我希望能理解我的意思。
猜你喜欢
  • 2020-10-22
  • 2014-10-09
  • 2016-06-25
  • 2018-04-11
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多