gpt4 book ai didi

haskell - Haskell(数据)构造函数构造什么?

转载 作者:行者123 更新时间:2023-12-03 21:08:05 25 4
gpt4 key购买 nike

Haskell 使人们能够使用类型构造函数和数据构造函数来构造代数数据类型。例如,

data Circle = Circle Float Float Float

我们被告知这个数据构造函数(右边的圆圈)是一个在给出数据时构造一个圆圈的函数,例如x,y,半径。
Circle :: Float -> Float -> Float -> Circle 

我的问题是:
  • 这个函数具体构造了什么?
  • 我们可以定义构造函数吗?

  • 我见过智能构造函数,但它们似乎只是最终调用常规构造函数的额外函数。

    来自 OO 背景的构造函数当然具有命令式规范。在 Haskell 中,它们似乎是系统定义的。

    最佳答案

    在 Haskell 中,不考虑底层实现,数据构造函数创建一个值,本质上是通过法令。 “ ‘让有一个Circle ’,程序员说,有一个 Circle 。”问什么Circle 1 2 3创建类似于询问文字 1在 Python 或 Java 中创建。

    空值构造函数更接近于您通常认为的字面量。 Boolean类型字面上定义为

    data Boolean = True | False

    在哪里 TrueFalse是数据构造函数,而不是 Haskell 语法定义的文字。

    数据类型也是构造函数的定义;因为除了构造函数名称及其参数之外,实际上没有任何值,只需说明它就是定义。您创建一个 Circle 类型的值通过调用数据构造函数 Circle有 3 个参数,就是这样。

    所谓的“智能构造函数”只是一个调用数据构造函数的函数,可能还有一些其他逻辑来限制可以创建哪些实例。例如,考虑一个简单的包装器 Integer :
    newtype PosInteger = PosInt Integer

    构造函数是 PosInt ;智能构造函数可能看起来像
    mkPosInt :: Integer -> PosInteger
    mkPosInt n | n > 0 = PosInt n
    | otherwise = error "Argument must be positive"

    mkPosInt ,无法创建 PosInteger带有非正参数的值,因为只有正参数才会真正调用数据构造函数。当模块导出智能构造函数而不是数据构造函数时,智能构造函数最有意义,因此典型用户无法创建任意实例(因为模块外部不存在数据构造函数)。

    关于haskell - Haskell(数据)构造函数构造什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51509949/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com