LINQ:为什么称它为“理解语法”

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

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

接纳或拥抱; 包括; 包括

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

它来自与语言无关的术语列表理解 ,许多语言都遵循这一术语。 历史显然是:

SETL编程语言(后来的20世纪60年代)有一个集合形成构造,计算机代数系统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。

[“OL手册”Philip Wadler,Quentin Miller和Martin Raskovsky,大概1983-1985]。

[“如何用成功名单取代失败”FPCA 1985年9月,南希,法国,第113-146页]。

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

我对作为.NET开发人员的术语linq理解语法的理解是,它允许您以熟悉的样式查询语言编写linq。 当一个人对linq的理解得到改进时,他们可能会转向.NET中已知的扩展方法语法,这也是.NET编译器在编译时解释linq的方式。

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

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