gpt4 book ai didi

functional-programming - 什么是代数数据类型(ADT)?

转载 作者:行者123 更新时间:2023-12-04 08:03:26 40 4
gpt4 key购买 nike

我听过很多人在函数式编程中谈论代数数据类型(不要与“抽象数据类型”混淆)。我所知道的是,ADT指的是某种复合(通常是递归)的数据类型,例如树或数学表达式。

Wikipedia中,只说了:

an algebraic data type is a kind of composite type, i.e., a type formed by combining other types. Two common classes of algebraic types are product types (i.e., tuples and records) and sum types (i.e. tagged or disjoint unions, or variant types).



但是没有给出正式的定义。

所以我想知道ADT的确切定义是什么?根据Wikipedia,产品类型和总和类型是ADT的两个示例,但是乘积和总和是定义AD​​T的唯一有效操作吗?是否还有其他允许的操作?

最佳答案

代数数据类型是复合类型,即由其他类型的组合形成的类型,通常分为两类:求和和乘积。

例如:

货币=美元+欧元+英镑
金钱=金额*货币

读取此内容的方法是按“或”转换总和,并按“与”转换乘积。

产品

产品是通常可以使用任何编程语言(无论是否具有功能)创建的类型,例如Kotlin,Java,C#,Swift中的Struct或C#等。

用AND读取组成它们的部分。

金钱=金额*货币

之所以将它们称为乘积,是因为它们可以具有的可能值的数量是组成部件的可能值的数量的乘积。



和类型是代数数据的一种,也称为区分联合或不联合联合,传统上仅在诸如Scala或Haskell之类的语言中具有直接支持。

组成求和类型的部分将读取为OR,因为结果对象的值只能包含选项之一。

货币=美元+欧元+英镑

在这种情况下,货币值只能是USD或EUR或GBP。

之所以将它们称为和,是因为可以具有的可能值的数量为:组成它的部件的可能值的数量之和。

这是指向我的博客(西类牙语)的链接,在该博客中,我有一篇包含kotlin示例的更完整的文章:
http://xurxodev.com/tipos-de-datos-algebraicos/

关于functional-programming - 什么是代数数据类型(ADT)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44991429/

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