【发布时间】:2013-11-17 07:18:02
【问题描述】:
我是 SML 的新手,我想确保自己真正了解基础知识。 SML中的type和datatype有什么区别,什么时候用?
【问题讨论】:
我是 SML 的新手,我想确保自己真正了解基础知识。 SML中的type和datatype有什么区别,什么时候用?
【问题讨论】:
sml 中的数据类型可以有多个类型,例如
datatype a = SomeType | SomeOtherType
你可以在类型检查时使用它们,例如
fun doThings (var : a) : bool =
case var of
(SomeType) => true
(SomeOtherType) => false
【讨论】:
type 声明只是为现有类型提供另一个名称。声明 type t = int * int 仅仅意味着您现在可以编写 t 而不是 int * int - 它实际上不提供任何功能。
datatype 定义允许您通过引入新的数据构造函数来创建全新的类型。数据构造函数是用于创建和模式匹配值的关键字和符号,例如列表类型的nil 和::。这些标识符没有什么特别之处。您可以像这样轻松地自己定义它们:
datatype 'a list = nil | :: of 'a * 'a list
【讨论】:
nil 和 :: 是 data 构造函数。类型构造函数是带有参数的 type,例如list 自己。
你可能会这样想:类型用于不透明和原子类型,而datatype 用于带有构造函数的类型,因此可以解构,主要是在表达式的模式匹配中。
如果datatype 实现了不透明类型(在签名中用type 声明并在实现签名的结构中定义为datatype),它也可以公开简单类型视图。
像int 和word 这样的原子类型在某些方面可能被视为可解构类型,例如Peano 对数字的算术解释,但SML 的int、word 和不太好称为real,是原始类型。
【讨论】: