它来自更通用的术语List Comprehension,许多语言都遵循这种形式。历史上,SETL编程语言(1960年代晚期)有一个集合构建结构,计算机代数系统AXIOM(1973年)也有一个类似处理流的结构,但是 “comprehension”一词最早用于Rod Burstall和John Darlington描述的函数式编程语言NPL, 该语言出现在1977年。FOLDOC大多也是如此。根据Rishiyur Nikhil的注释,该术语本身似乎是由Phil Wadler在1983-5年左右创造的,尽管编程结构本身的历史要久远得多(最可能是Jack Schwartz和SETL语言)。“列表理解”一词出现在下面的参考资料中。符号的最早参考文献是Rod Burstall和John Darlington对他们的语言NPL的描述。
我认为这篇论文可以启发一些思路http://dl.acm.org/citation.cfm?id=181564。他们(我认为)论证和定义了什么是理解语法。这篇文章发表于1994年,可能影响了LINQ的设计概念。
由于“comprehension”和“comprehensive”这个词在英语中经常用来表示“整体”和“完整性”,因此理解语法的一种含义可以是一种能够生成值集合的表达式的语法,这些值“包括所有值”(理解)并遵守这些表达式所表达的规则。另一个意义可能更与从某个指定集合开始生成值的子集(列表)有关,因此属于起始集合且“包含”在原始集合中的值的子集。因此,理解语法可以是编程语言结构的语法,这些语法可以生成包含在指定原始集合中的子集值。
作为一名.NET开发人员,我对linq推导语法的理解是它允许你使用熟悉的查询语言风格编写linq。随着对linq的理解加深,人们可能会转向在.NET中称为扩展方法语法的方式,这也是.NET编译器在编译时将解释linq的方式。