首页 文章

SML:类型和数据类型之间的差异

提问于
浏览
11

我是SML的新手,我想确保我真正了解基础知识 . SML中的类型和数据类型有什么区别,以及何时使用哪个?

3 回答

  • 16

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

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

    datatype 'a list = nil | :: of 'a * 'a list
    
  • 0

    sml中的数据类型可以有多种类型,例如

    datatype a = SomeType | SomeOtherType
    

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

    fun doThings (var : a) : bool =
        case var of
           (SomeType) => true
           (SomeOtherType) => false
    
  • 3

    您可以将其视为:type类型用于opaque和atomic类型,而 datatype 用于带有构造函数的类型,因此可以进行解构,主要是在表达式上的模式匹配中 .

    如果它实现了一个opaque类型(在签名中用 type 声明并在实现签名的结构中定义为 datatype ),那么 datatype 也可以公开一个简单的类型视图 .

    intword 这样的原子类型在某些方面可能被视为可破坏类型,例如Peano对数字的算术解释,但SML的 intword 和不那么好称为 real 的是原始类型 .

相关问题