Types 在sml中声明数据类型的数据类型

Types 在sml中声明数据类型的数据类型,types,sml,Types,Sml,我想知道如何将一个数据类型声明为另一个数据类型。 即 我想声明另一个数据类型的数据类型。那么我就不需要把牌组中的52张牌都单独声明了。因此,我认为我只将卡片的值声明为一种数据类型,将卡片的颜色声明为另一种数据类型。尝试将数据类型卡与函数匹配时出现问题。我需要声明颜色的值,比如红心=2和钻石=1,但当我匹配时,这不是问题。我将能够发送两颗心到一个函数,就像一个参数,而不是(两颗心)像两个参数 匹配构造函数的正确语法是 fun value (TWO s) = 2 | value (THREE s

我想知道如何将一个数据类型声明为另一个数据类型。 即


我想声明另一个数据类型的数据类型。那么我就不需要把牌组中的52张牌都单独声明了。因此,我认为我只将卡片的值声明为一种数据类型,将卡片的颜色声明为另一种数据类型。尝试将数据类型卡与函数匹配时出现问题。我需要声明颜色的值,比如红心=2和钻石=1,但当我匹配时,这不是问题。我将能够发送两颗心到一个函数,就像一个参数,而不是(两颗心)像两个参数

匹配构造函数的正确语法是

fun value (TWO s) = 2
  | value (THREE s) = 3
或者在这种情况下,因为你不需要西装:

fun value (TWO _) = 2
  | value (THREE _) = 3

匹配构造函数的正确语法是

fun value (TWO s) = 2
  | value (THREE s) = 3
或者在这种情况下,因为你不需要西装:

fun value (TWO _) = 2
  | value (THREE _) = 3

这将实现以下目的:

fun value (TWO _)   = 2
  | value (THREE _) = 3
模式中的下划线表示“我不在乎这个值-我甚至不会给它起名字。”
TWO和
TWO已经是构造函数,它们采用了
suites
类型-我们不在乎它到底是什么

现在,像这样表示卡片不是很实用-如果你想要一副完整的卡片,你必须在你的函数中创建十三个类型构造函数和十三个子句!相反,我们可以使用整数:

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
  ...

这将实现以下目的:

fun value (TWO _)   = 2
  | value (THREE _) = 3
模式中的下划线表示“我不在乎这个值-我甚至不会给它起名字。”
TWO和
TWO已经是构造函数,它们采用了
suites
类型-我们不在乎它到底是什么

现在,像这样表示卡片不是很实用-如果你想要一副完整的卡片,你必须在你的函数中创建十三个类型构造函数和十三个子句!相反,我们可以使用整数:

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
  ...