2016-11-12 55 views
3

ML中可能允许ML中的变量有多种类型吗?如何在ML中有多个类型?

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

Node of int * string 

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

+0

这被称为“联盟类型”afaik。 Idk如果ML有他们,但这就是你可以搜索的。 – Carcigenicate

回答

3

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

datatype Node = IntNode of int 
       | StringNode of string 
0

只是概括@ 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") 

这是更轻巧一点比为这种情况明确定义一个自定义总和类型。

相关问题