我是SML的新手,我想确保我真正了解基础知识。 SML中的类型和数据类型有什么区别,以及何时使用哪个?
答案 0 :(得分:16)
type
声明只是为现有类型指定另一个名称。声明type t = int * int
只是意味着您现在可以编写t
而不是int * int
- 它实际上并不提供任何功能。
datatype
定义允许您通过引入新的数据构造函数来创建全新的类型。数据构造函数是用于创建和模式匹配值的关键字和符号,例如列表类型nil
和::
。这些标识符没有什么特别之处;你可以像这样轻松地定义它们:
datatype 'a list = nil | :: of 'a * 'a list
答案 1 :(得分:3)
sml中的数据类型可以有多种类型,例如
datatype a = SomeType | SomeOtherType
您可以在类型检查时使用它们,例如
fun doThings (var : a) : bool =
case var of
(SomeType) => true
(SomeOtherType) => false
答案 2 :(得分:0)
您可以将其视为:type用于opaque和atomic类型,而datatype
用于带有构造函数的类型,因此可以解析,主要是在表达式上的模式匹配中。
如果datatype
实现了一个opaque类型(在签名中用type
声明并在实现签名的结构中定义为datatype
),那么int
也可以公开一个简单的类型视图。
像word
和int
这样的原子类型在某些方面可能会被视为可毁坏的类型,例如Peano对数字的算术解释,但是SML的word
,real
和不太好称为{{1}},是原始类型。