codata和数据有什么区别?

Bad*_*Bad 11 data-structures codata

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

在阅读关于溪流的时候,我偶然发现了一些术语.

pyo*_*yon 17

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


真正的区别......

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

数据

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

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

计算

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

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


回到codata ......

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

流是codata

什么是流?流是计算的引用1,当执行时,产生以下任一项:

  • 序列的第一个元素("头部"),以及逻辑上是序列其余部分的另一个流("尾部").要么...

  • 一个特殊符号("nil"),表示序列的结束.

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

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

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


1正确的技术术语是"thunk",而不是"reference".