如何在 ML 中拥有不止一种类型?

How to have more than one type in ML?

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

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

Node of int * string

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

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

datatype Node = IntNode of int
              | StringNode of string

只是为了概括一下@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")

这比专门为这种情况定义自定义总和类型要轻一些。