Haskell和LINQ之间有什么联系吗?

Mir*_*cea 26 c# linq haskell

我使用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深受功能编程思想的影响.它旨在将函数视为一等对象,强调对副作用的计算等.

  • @Eric:祝贺你的1000个答案,今天就注意到了.谢谢你的贡献. (4认同)
  • @Eric:好的:O.好吧,我一直认为MS无论如何应该为此付钱.我知道这是志愿者的工作,但当你看到最终效果时,这真的有助于MS大时间IMO.如果我没有阅读你的帖子,我不会知道很多关于C#和.NET的东西. (3认同)
  • @Joan:的确,这是#1000的答案.显然我手上有太多时间. (2认同)
  • 我不同意在生产代码中不使用它,monad太有用了! (2认同)

Con*_*rix 9

看看Erik Meijer Lecture可能是值得的.这是对它的描述.

我们带着功能语言纯粹主义者和lambda演算大祭司Erik Meijer博士进入C9讲座,进入功能编程世界(您可以感谢Erik的许多功能结构,这些结构已经出现在C#等语言中VB.NET.当你使用LINQ时,感谢Erik除了Anders之外.