如何在ML中使用多种类型?

时间:2016-11-12 23:36:16

标签: sml ml

在ML中是否可以允许ML中的变量具有多种类型?

例如,如果我希望树中的节点只是一个int或一个字符串。

Node of int * string

我试过这个,但它只会产生一个元组类型(int,string)。我不希望它是一个元组,只是一个int或一个字符串。这是允许的吗?

2 个答案:

答案 0 :(得分:3)

正如评论中所指出的,您正在寻找的功能是联合类型。我相信它们在SML中的语法是:

datatype Node = IntNode of int
              | StringNode of string

答案 1 :(得分:1)

只是为了概括@TimDestan的一个很好的答案: 一种的另一种值的一般概念可以在一种类型中编码。例如,在Haskell和Scala中,我们有Either类型,它只能保存两种不同类型的值。我们可以在SML中定义相同的内容:

datatype ('a, 'b) either = Left of 'a | Right of 'b

现在您可以将节点编码为:

Node of (int, string) either

节点可以构造成:

Node (Left 1)
Node (Right "hello")

这比为此案例定义自定义和类型要轻一些。