【发布时间】:2015-10-23 22:24:21
【问题描述】:
我读过一些关于代数数据类型的解释:
- The Algebra of Algebraic Data types I
- The Algebra of Algebraic Data types II
- The Algebra of Algebraic Data types III
- The Algebra of Data, and Calculus of Mutation
这些文章给出了非常详细的描述和代码示例。
起初我以为代数数据类型只是为了轻松定义一些类型,我们可以用模式匹配来匹配它们。但是看了这些文章,我发现里面根本没有提到“模式匹配”,内容看起来很有趣,但比我想象的要复杂得多。
所以我有一些问题(这些文章中没有回答):
- 为什么我们需要它,比如说,在 Haskell 或 Scala 中?
- 有了它我们能做什么,没有它我们不能做什么?
【问题讨论】:
-
您希望元组返回多个结果,并且您希望 sum-types 做出明确的选择。 (当然这只是沧海一粟——你可以写关于这些东西的书)。您提供的链接可能具有误导性 - 您可能会认为您只需要这些东西来处理 ivory-tower-arkane-magic 的东西,但它实际上只是一种以理智的方式管理数据的方法(特别是如果您没有类、继承和变异引用供您使用)
-
@Carsten 我觉得你理解我的困惑。感谢您的评论,并希望您能说出更多信息:)
-
只是为了表示警告,首字母缩略词“ADT”也用于表示“抽象数据类型”,这是与“代数数据类型”相反的概念。因此,应谨慎使用首字母缩略词“ADT”,即根本不用。
-
@pigworker 谢谢,已修复
-
如果你想知道人们为什么需要数字,不要从数论课程开始。它不会提及诸如平衡您的支票簿或数羊之类的事情。我夸大了一点。
标签: scala haskell algebraic-data-types