【问题标题】:SML: difference between type and datatypeSML:类型和数据类型之间的区别
【发布时间】:2013-11-17 07:18:02
【问题描述】:

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

【问题讨论】:

    标签: types sml smlnj


    【解决方案1】:

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

    datatype a = SomeType | SomeOtherType
    

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 一个尼特:nil 和 :: 是 data 构造函数。类型构造函数是带有参数的 type,例如list 自己。
      【解决方案3】:

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

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

      像int 和word 这样的原子类型在某些方面可能被视为可解构类型,例如Peano 对数字的算术解释,但SML 的int、word 和不太好称为real,是原始类型。

      【讨论】:

        猜你喜欢
        • 2012-12-09
        • 2010-10-28
        • 2014-09-06
        • 2015-03-31
        • 1970-01-01
        • 2021-01-12
        • 2013-10-05
        • 2016-09-28
        • 2011-07-18
        相关资源
        最近更新 更多