我想知道如何将数据类型声明为另一种数据类型。I.e
datatype suits = HEARTS | DIAMONDS
datatype card = TWO of suits | THREE of suits
fun value TWO of suits = 2
|value THREE of suits = 3我想声明另一个数据类型的数据类型。这样我就不需要单独声明这副牌中的52张牌了。因此,我认为我只将卡片的值声明为一种数据类型,将卡片的颜色声明为另一种数据类型。当我尝试将数据类型卡与函数进行匹配时出现问题。我需要声明颜色的值,也像红心=2和方块=1,但当我匹配时,这不是问题。我将能够发送两个心给一个函数,像一个参数而不是(两个,心)像两个参数。
发布于 2014-02-13 04:52:26
匹配构造函数的正确语法是
fun value (TWO s) = 2
| value (THREE s) = 3或者在这种情况下,因为你不需要西装:
fun value (TWO _) = 2
| value (THREE _) = 3发布于 2014-02-13 05:19:58
这将会起到作用:
fun value (TWO _) = 2
| value (THREE _) = 3模式中的下划线意味着“我不关心这个值-我甚至不会给它命名。”TWO和THREE已经是接受suits类型的东西的构造函数-我们并不关心它到底是什么。
现在,像这样表示卡片并不是很实用-如果你想要一副完整的卡片,你必须在你的函数中创建13个类型的构造函数和13个子句!相反,我们可以使用一个整数:
type card = int * suits或者,如果你想让它有一个构造函数,你甚至可以这样做:
datatype card = Card of int * suits或者你可以改变你的套装数据类型:
datatype suits = HEARTS of int
| DIAMONDS of int
...然后value会是这样的:
fun value (HEARTS n) = n
| value (DIAMONDS n) = n
...https://stackoverflow.com/questions/21736865
复制相似问题