codata和数据有什么区别?

时间:2015-03-03 20:24:13

标签: data-structures codata

有一些解释here。直观地,我理解有限数据结构与流等无限数据结构的区别。然而,看到有关差异,特征,类型的其他解释是有趣的。

在阅读streams时,我偶然发现了一个词条术语。

1 个答案:

答案 0 :(得分:14)

这个答案并不十分准确,但无论如何我都会发布它。


真正的区别......

...介于数据计算之间。

数据

数据的基本属性是它具有结构。数据可以作为输入传递,并通过计算作为输出返回。数据结构可以通过计算使用。但是,数据本身并没有做任何事情。 的数据是

数据类型的示例是布尔值,数字,字符串,代数数据类型(标记的联合)等。相应地,的示例是false2"pyon"SOME 2。计算操作值是有意义的:例如,计算可以分支,具体取决于数字是偶数还是奇数。但是,询问值可以做什么没有意义:数字2不能做任何事情,只是。

计算中

计算的基本属性是它们具有行为。换句话说,计算。但是,计算“太活跃”而无法传递或存储在变量中。例如,您无法在变量中存储打印“Hello,world!”的行为。到了屏幕。

您可能反对在变量中存储对函数的引用。但是对函数的引用与函数执行时的行为并不完全相同!前者是数据,后者是计算。


回到codata ......

什么是codata?在给出正确的定义之前,我将使用一个例子:

  

Streams是codata

什么是流?流是 1 的参考,在执行时产生的计算:

  • 序列的第一个元素(“head”),以及逻辑上是序列其余部分的另一个流(“tail”)。或...

  • 表示序列结束的特殊符号(“nil”)。

Streams(更常见的是,codata)是数据,因为它们是对计算的引用,而不是计算本身。然而,使流(以及更一般地说,codata)特殊的原因在于,当执行基础计算时,它们可能会产生其他流(更常见的是,codata)。

现在我终于可以给出一个正确的定义:

  

Codata是对计算的引用,当执行时,可能会产生(除此之外)更多的codata。


1 正确的技术术语是“thunk”,而不是“reference”。