Lif*_*ang 7 functional-programming algebraic-data-types
我听过很多人在函数式编程中谈论代数数据类型(不要与"抽象数据类型"混淆).我所知道的是,ADT指的是某种复合(通常是递归的)数据类型,如树或数学表达式.
在维基百科中,它只说:
代数数据类型是一种复合类型,即通过组合其他类型形成的类型.两类常见的代数类型是产品类型(即元组和记录)和和类型,也称为标记或不相交的联合或变体类型.
但没有给出正式的定义.
所以我想知道ADT的定义究竟是什么?根据维基百科,产品类型和总和类型是ADT的两个例子,但是产品和总和是定义ADT的唯一有效操作吗?是否还允许其他操作?
代数数据类型是复合类型,即由其他类型的组合形成的类型,通常分为两类:求和和乘积。
例如:
货币=美元+欧元+英镑
货币=金额*货币
读取此内容的方法是按“或”转换和,并按“与”转换乘积。
产品是通常可以使用任何编程语言(无论是否具有功能)创建的类型,例如Kotlin,Java,C#,Swift中的Struct或C#等。
用AND读取组成它们的部分。
金钱=金额*货币
之所以将它们称为乘积,是因为它们可以具有的可能值的数量是组成部件的可能值的数量的乘积。
和类型是代数数据的一种,也称为区分联合或不联合联合,传统上仅在诸如Scala或Haskell之类的语言中具有直接支持。
组成求和类型的部分将读取为OR,因为结果对象的值只能包含选项之一。
货币=美元+欧元+英镑
在这种情况下,货币值只能是USD或EUR或GBP。
之所以将它们称为和,是因为可以具有的可能值的数量为:组成它的部件的可能值的数量之和。
这是我博客的链接(西班牙语),在该博客上,我有一篇有关kotlin示例的更完整文章:http ://xurxodev.com/tipos-de-datos-algebraicos/