Types 什么是归纳定义的数据类型?

Types 什么是归纳定义的数据类型?,types,functional-programming,language-agnostic,terminology,induction,Types,Functional Programming,Language Agnostic,Terminology,Induction,归纳数据类型的一些示例是什么?感应类型与非感应类型有何不同?他们能做什么,否则是不可能的?什么时候不应该使用它们 任何语言中的代码片段都会非常受欢迎。归纳数据类型只是根据其自身定义的数据类型。一个简单的例子是列表,我们可以将其定义为: type List<'a> = | Empty | List of 'a * List<'a> 这将接受一个项目和一个列表作为输入,并返回一个新列表。如果输入列表为空,它将返回一个列表,其中项目为标题,空列表为结尾。如果列表不是空的,它将

归纳数据类型的一些示例是什么?感应类型与非感应类型有何不同?他们能做什么,否则是不可能的?什么时候不应该使用它们


任何语言中的代码片段都会非常受欢迎。

归纳数据类型只是根据其自身定义的数据类型。一个简单的例子是列表,我们可以将其定义为:

type List<'a> =
| Empty
| List of 'a * List<'a>
这将接受一个项目和一个列表作为输入,并返回一个新列表。如果输入列表为空,它将返回一个列表,其中项目为标题,空列表为结尾。如果列表不是空的,它将返回一个新列表,其中项目作为头,原始列表作为尾

我们可以使用此函数建立任何类型的列表。对于整数,这将类似于:

Empty 
|> add 1
|> add 2
|> add 3
其中
|>
是一个运算符,它接受前面的值并将其作为最后一个参数传递给下一个函数。这给了我们一个清单:

List<int> = List (3,List (2,List (1,Empty)))
List=List(3,List(2,List(1,空)))

至于不应使用它们的情况,在某些情况下,递归定义的数据结构可能会导致性能或内存损失,例如,可变状态数组。这通常是由于底层系统实现基于由阵列更紧密镜像的结构。然而,根据用例的不同,维护可变状态数组可能会招致其他惩罚,例如并发应用程序中的锁管理。如果您对更详细的分析感兴趣,我强烈推荐这本书。

您是在寻找递归数据类型还是代数数据类型(可能不是递归的)?@duggi我不确定-我的印象是,术语归纳数据类型,递归数据类型和代数数据类型都是同义词。@至少在我的理解中,马里奥代数递归数据类型和归纳数据类型是相同的。但是代数数据类型是不同的。例如,元组是一种代数数据类型,因为它接受特定类型(通常不是元组)的值,这是类型的组合。但自然数可能是归纳型的一个例子。
List<int> = List (3,List (2,List (1,Empty)))