【问题标题】:What is the difference between codata and data?codata 和 data 有什么区别?
【发布时间】:2015-03-03 20:24:13
【问题描述】:

有一些解释here。直觉上,我理解有限数据结构与流等无限数据结构有何不同。不过,有趣的是看到其他关于差异、特征和余数据类型的解释。

我在阅读 streams 时偶然发现了 codata 术语。

【问题讨论】:

    标签: data-structures codata


    【解决方案1】:

    这个答案不是很准确,但我还是要发布它。


    真正的区别...

    ... 介于 datacomputations 之间。

    数据

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

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

    计算

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

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


    返回代码...

    究竟什么是余数据?在给出正确的定义之前,我先举个例子:

    流是 codata

    究竟什么是流?流是对计算的引用1在执行时会产生:

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

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

    流(以及更普遍的 codata)是数据,因为它们是对计算的引用,而不是计算本身。然而,流(更一般地说,余数据)的特殊之处在于,当执行底层计算时,它们可能会产生其他流(更一般地说,余数据)。

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

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


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

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2018-06-18
      • 2010-10-04
      • 2018-06-11
      • 2016-03-26
      • 2019-10-12
      相关资源
      最近更新 更多