【问题标题】:LINQ: Why is it called "Comprehension Syntax"LINQ:为什么叫“理解语法”
【发布时间】:2011-06-03 15:32:14
【问题描述】:

为什么following LINQ syntax(有时称为“查询”语法)称为“理解”语法?什么被理解(肯定是错的)?或者,全面代表什么(也许我现在走在正确的轨道上)?

【问题讨论】:

标签: c# linq syntax naming


【解决方案1】:

它来自许多语言都遵循的更多与语言无关的术语List Comprehension。历史显然是:

SETL 编程语言(1960 年代后期)具有集合形成构造,计算机代数系统 AXIOM(1973)具有类似的处理流的构造,但 第一次使用术语“理解”来表示此类构造出现在 Rod Burstall 和 John Darlington 从 1977 年开始对其函数式编程语言 NPL 的描述中。

FOLDOC 也大多与此相呼应:

根据 Rishiyur Nikhil 的注释(1992 年 8 月),该术语本身似乎是由 Phil Wadler 大约在 1983-5 年创造的,尽管编程结构本身可以追溯到更远的地方(很可能是 Jack Schwartz 和 SETL 语言)。

“列表理解”一词出现在下面的参考资料中。

最早提到该符号的是 Rod Burstall 和 John Darlington 对他们的语言 NPL 的描述。

[“The OL Manual”Philip Wadler、Quentin Miller 和 Martin Raskovsky,可能是 1983-1985]。

[“如何用成功列表替换失败”FPCA 1985 年 9 月,法国南希,第 113-146 页]。

【讨论】:

  • 我查看了您(和 Marc)引用的 Wikipedia 文章,但我仍然对 /why/ 它的名称感到困惑(到目前为止,您的回答似乎主要是关于 /when /它被称为)。 /this Wikipedia 文章 (en.wikipedia.org/wiki/Comprehension_(logic)) 是否具有相关性?它是否被称为“理解”语法,因为关于查询的所有内容都是一起定义的(与 LINQ 扩展方法相反,它一次定义一个块的查询)?
  • @lance - 因为它必须被称为某种东西;p 有时就是这么简单......
  • @lance 这就是我包含 FOLDOC 参考列表的原因,因为他们提到了一些实际来源的名称。如果这些资料中没有任何理由或解释,那么是的,这基本上就是 Marc 所说的——“之所以这么叫,是因为一直这么叫”。
【解决方案2】:

我怀疑这与Comprehend的第二个含义有关:

接受或拥抱;包括; 包括

此语法与定义应包含在集合中的内容有关。

【讨论】:

  • 丹尼尔的回答给了我一些很好的阅读,但我正在改变这个问题以接受马蒂亚斯的回答。 Daniel 的回答更多地涉及“理解”一词的历史,而 Mathias 的非常简单的观点清楚地表明了该术语与其 inclusion 的次要定义之间的关联,这是“列表”概念的核心理解':从一组或列表中获取并包含在另一个中。
【解决方案3】:

我认为这篇论文可以阐明http://dl.acm.org/citation.cfm?id=181564 即他们争论并定义(我认为)什么是理解语法。它是 1994 年发布的,可能它影响了 LINQ 的设计理念。

【讨论】:

    【解决方案4】:

    作为 .NET 开发人员,我对术语 linq 理解语法的理解是,它允许您以熟悉的样式查询语言编写 linq。随着人们对 linq 理解的提高,他们可能会转向 .NET 中所谓的扩展方法语法,这也是 .NET 编译器在编译时解释 linq 的方式。

    【讨论】:

      【解决方案5】:

      由于术语“comprehension”和“comprehensive”在英语中经常用于表示“整体”和“完整性”,因此理解语法的一个含义可能是一种语法,它允许构建能够生成的表达式“包含所有值”(理解)的值集,这些值尊重这些表达式所表达的规则。

      另一个含义可能与从某个指定集合开始的值子集(列表)的生成更相关,因此属于起始集合并且它“包含”在原始集合中的值子集。出于这个原因,理解性 sintax 可能是编程语言构造的 sintax,它可以生成包含在指定原始集合中的子集值。

      【讨论】:

      • 你知道你可以编辑你现有的答案而不是写第二个吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多