我使用LINQ在C#中编写了一些查询.过了一会儿,我开始使用Haskell一点点,这是一种函数式编程语言(一种不那么流行的语言),对我来说似乎它们几乎都是一样的.但我不确定这一点.如果有人比我更多地使用它们,他们能不能告诉我它们在编程原理上是否几乎相同?
LINQ可以被认为是函数式编程吗?
谢谢.
Eri*_*ert 57
对我而言,似乎两者几乎都是一回事.但我不确定这一点.如果有人比我更多地使用它们,他们能不能告诉我它们在编程原理上是否几乎相同?
是的,LINQ查询理解的设计很大程度上受到Haskell设计的影响.当我们设计LINQ时,Haskell专家Erik Meijer加入了C#语言设计委员会; 他的见解非常宝贵.(我在这个过程结束时加入了设计团队,所以不幸的是我没有参与所有有趣的曲折,这些设计经历了多年;它开始变得更加传统OO而不是最终!)
如果你最近对Haskell进行了认真的探索,那么你可能已经熟悉了monad的想法.LINQ语法专门设计用于使序列monad上的操作感觉自然,但实际上实现更通用; C#调用"SelectMany"是对任意monad的"绑定"操作的略微修改形式.你可以使用任何monad实际使用查询理解,正如我的同事Wes在这里描述的那样,但这样做看起来很奇怪,我建议在生产代码中反对它.
LINQ可以被认为是函数式编程吗?
是的,LINQ深受功能编程思想的影响.它旨在将函数视为一等对象,强调对副作用的计算等.
看看Erik Meijer Lecture可能是值得的.这是对它的描述.
我们带着功能语言纯粹主义者和lambda演算大祭司Erik Meijer博士进入C9讲座,进入功能编程世界(您可以感谢Erik的许多功能结构,这些结构已经出现在C#等语言中VB.NET.当你使用LINQ时,感谢Erik除了Anders之外.