【发布时间】:2015-03-03 20:24:13
【问题描述】:
【问题讨论】:
【问题讨论】:
这个答案不是很准确,但我还是要发布它。
... 介于 data 和 computations 之间。
数据的基本属性是它有一个结构。数据可以作为输入传递并通过计算作为输出返回。数据的结构可以被计算使用。然而,数据本身并没有做任何事情。数据只是是。
数据类型的例子有布尔值、数字、字符串、代数数据类型(标记联合)等。相应地,值的例子有false、@987654322 @、"pyon"、SOME 2。计算对值进行操作是有意义的:例如,计算可以分支,具体取决于数字是偶数还是奇数。但是,问值能做什么是没有意义的:数字 2 不能做任何事情,它就是。
计算的基本属性是它们具有行为。换句话说,计算做。但是,计算“过于活跃”而无法传递或存储在变量中。例如,您不能在变量中存储打印“Hello, world!”的行为。到屏幕上。
您可能会反对您可以在变量中存储对函数的引用。但是对函数的引用与函数执行时的行为并不完全相同!前者是数据,后者是计算。
究竟什么是余数据?在给出正确的定义之前,我先举个例子:
流是 codata
究竟什么是流?流是对计算的引用1,在执行时会产生:
序列的第一个元素(“head”),以及逻辑上是序列剩余部分的另一个流(“tail”)。或者……
表示序列结束的特殊符号(“nil”)。
流(以及更普遍的 codata)是数据,因为它们是对计算的引用,而不是计算本身。然而,流(更一般地说,余数据)的特殊之处在于,当执行底层计算时,它们可能会产生其他流(更一般地说,余数据)。
现在我终于可以给出一个正确的定义了:
Codata 是对计算的引用,当执行该计算时,可能会产生(除其他外)更多的 codata。
1 正确的技术术语是“thunk”,而不是“reference”。
【讨论】: