17

我是 SML 的新手,我想确保自己真正了解基础知识。SML 中的类型和数据类型有什么区别,什么时候使用?

4

3 回答 3

24

type声明只是为现有类型提供另一个名称。声明type t = int * int只是意味着您现在可以编写t而不是int * int- 它实际上并不提供任何功能。

datatype定义允许您通过引入新的数据构造函数来创建全新的类型。数据构造函数是用于创建和模式匹配值的关键字和符号,例如列表类型的nil::。这些标识符没有什么特别之处。您可以像这样轻松地自己定义它们:

datatype 'a list = nil | :: of 'a * 'a list
于 2013-11-06T10:14:49.333 回答
3

sml 中的数据类型可以有不止一种类型,例如

datatype a = SomeType | SomeOtherType

您可以在类型检查时使用它们,例如

fun doThings (var : a) : bool =
    case var of
       (SomeType) => true
       (SomeOtherType) => false
于 2013-11-06T10:13:43.210 回答
1

你可能会这样想:类型用于不透明和原子类型,而datatype用于具有构造函数的类型,因此可以解构,主要是在表达式的模式匹配中。

如果 A 实现了不透明类型(在签名中声明并在实现签名的结构中定义为 a ),则Adatatype也可以公开简单的类型视图。typedatatype

原子类型intword在某些方面可能被视为可解构类型,就像 Peano 对数字的算术解释一样,但 SMLintword不那么好称为real的 是原始类型。

于 2014-02-04T19:38:45.403 回答