gpt4 book ai didi

functional-programming - 为什么 "Algebraic data type"在名称中使用 "Algebraic"?

转载 作者:行者123 更新时间:2023-12-04 14:58:17 31 4
gpt4 key购买 nike

当我学习 Scala/Haskell 时,我看到了 Algebraic data type 的概念。我已经阅读了维基百科的解释,但我仍然有一个问题:

为什么它的名字中使用“代数”这个词?它与“代数”有什么关系吗?

最佳答案

简单地说,我们必须在这里考虑代数和类型之间的关系。 Haskell 的代数数据类型之所以如此命名是因为它们对应于范畴论中的初始代数。

维基百科说:

In computer programming, particularly functional programming and type theory, an algebraic data type is a kind of composite type, i.e. a type formed by combining other types.



让我们以 Maybe a 数据类型为例:
data Maybe a = Nothing | Just a
Maybe a 表示它可能包含 a - Just Int 类型的东西,例如,但也可以是空的 - Nothing。在haskell 中,类型是对象,例如 Int 。运算符获取类型并生成新类型,例如 Maybe IntAlgebraic 指代数数据类型由 algebraic 操作创建的属性: sumsproduct 其中:
  • "sum"是交替(A | B,意思是 A 或 B 但不是两者)
  • “产品”是组合(A B,意思是A和B在一起)

  • 例如,让我们看到 sum 表示 Maybe a 。首先让我们定义 Add 类型:
    data Add a b = Left a | Right b

    在haskell |or ,所以它可以是 或 Left aRight b 。竖线 | 显示我们上面定义的 Maybe 是一个和类型,这意味着我们可以用 Add 写它:
    type Maybe a = Add Nothing (Just a)
    Nothing 这里是 unit 类型:

    In the area of mathematical logic and computer science known as type theory, a unit type is a type that allows only one value


    data Unit = Unit

    () 在 haskell 中。
    Just a 是单例类型 as。单例类型是那些只有一个值的类型。
    data Just a = Just a

    之后,我们可以将其重写为:
    type Maybe a = Add () a

    所以我们有单元类型 - 1 和单例类型 - a 。现在我们可以说 Maybe a 与 1 + a 相同。

    如果你想深入 - The Algebra of Data, and the Calculus of Mutation

    关于functional-programming - 为什么 "Algebraic data type"在名称中使用 "Algebraic"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25061345/

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