首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sml中声明数据类型的数据类型

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

Stack Overflow用户
提问于 2014-02-13 02:45:59
回答 2查看 326关注 0票数 0

我想知道如何将数据类型声明为另一种数据类型。I.e

代码语言:javascript
复制
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,但当我匹配时,这不是问题。我将能够发送两个心给一个函数,像一个参数而不是(两个,心)像两个参数。

EN

回答 2

Stack Overflow用户

发布于 2014-02-13 04:52:26

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

代码语言:javascript
复制
fun value (TWO s) = 2
  | value (THREE s) = 3

或者在这种情况下,因为你不需要西装:

代码语言:javascript
复制
fun value (TWO _) = 2
  | value (THREE _) = 3
票数 2
EN

Stack Overflow用户

发布于 2014-02-13 05:19:58

这将会起到作用:

代码语言:javascript
复制
fun value (TWO _)   = 2
  | value (THREE _) = 3

模式中的下划线意味着“我不关心这个值-我甚至不会给它命名。”TWOTHREE已经是接受suits类型的东西的构造函数-我们并不关心它到底是什么。

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

代码语言:javascript
复制
type card = int * suits

或者,如果你想让它有一个构造函数,你甚至可以这样做:

代码语言:javascript
复制
datatype card = Card of int * suits

或者你可以改变你的套装数据类型:

代码语言:javascript
复制
datatype suits = HEARTS of int
               | DIAMONDS of int
               ...

然后value会是这样的:

代码语言:javascript
复制
fun value (HEARTS n)   = n
  | value (DIAMONDS n) = n
  ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21736865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档