2016-11-12 58 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") 

這是更輕巧一點比爲這種情況明確定義一個自定義總和類型。

相關問題