Types SML:类型和数据类型之间的差异
我是SML的新手,我想确保我真正了解基本知识。SML中的类型和数据类型有什么区别,何时使用哪种类型?SML中的数据类型可以有多个类型,例如Types SML:类型和数据类型之间的差异,types,sml,smlnj,Types,Sml,Smlnj,我是SML的新手,我想确保我真正了解基本知识。SML中的类型和数据类型有什么区别,何时使用哪种类型?SML中的数据类型可以有多个类型,例如 datatype a = SomeType | SomeOtherType 您可以在类型检查时使用它们,例如 fun doThings (var : a) : bool = case var of (SomeType) => true (SomeOtherType) => false type声明只是为现有
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
您可能会这样想:类型用于不透明和原子类型,而
datatype
用于带构造函数的类型,因此,可以对其进行分解,主要是在表达式的模式匹配中
如果datatype
实现了不透明类型(在签名中用type
声明,在实现签名的结构中定义为datatype
),那么datatype也可能公开简单的类型视图
像int
和word
这样的原子类型在某些方面可能被视为可分解的类型,比如数字的Peano算术解释,但SML的int
,word
和不太好的real
,是基元类型。One nit:nil
和:
是数据构造函数。类型构造函数是带有参数的类型,例如list
本身。