是否有适用于.NET的函数式编程库?

时间:2008-09-17 14:30:24

标签: c# .net functional-programming

例如,在Java中有Functional JavaHigher-Order Java。两者本质上都提供了一个小API来处理高阶,curried函数,也许还有一些新的数据类型(元组,不可变列表)。

10 个答案:

答案 0 :(得分:9)

LanguageExt看起来非常有望使C#中的函数式编程更容易。

https://github.com/louthy/language-ext

答案 1 :(得分:5)

你看过F#吗?

另一个简洁的博客文章是here,讨论如何使用c#3.0中内置的新泛型/ lambda表达式。

如果您只是使用System.Linq添加到源文件的顶部,那么添加了许多很好的新函数来处理诸如折叠/过滤等的集合。

答案 2 :(得分:5)

假设您无论出于何种原因都不能使用F#,只是想在C#代码中使用功能范例和习惯用法来提高质量和性能。可靠性:

Functional style pattern matching for C#

Monad library for C#/.Net

还有'elevate'有一些功能性的东西,如选项类型(maybes)等。

答案 3 :(得分:2)

我想你想要F#

此外,最新版本的C#在基础语言中包含了许多功能概念。

答案 4 :(得分:2)

C#可能有这样的库,但你应该考虑使用F#http://research.microsoft.com/fsharp/fsharp.aspxhttp://msdn.microsoft.com/en-us/fsharp/default.aspx

Microsoft计划将F#作为Visual Studio中的一流语言,因此使用其中一个CTP构建初始内容的风险应该很小。

答案 5 :(得分:2)

如果你正在寻找扩展C#的东西,那么没有,但是F#是基于.NET的函数式语言。来自“关于F#”page

  

F#是.NET Framework的类型化函数编程语言。它将类型化函数编程的简洁性,表达性和组合性与.NET的运行时支持,库,互操作性,工具和对象模型相结合。 F#源于ML系列语言,并且具有与OCaml兼容的核心语言,但也来自C#和Haskell。 F#从一开始就被设计为.NET上的一流公民,可以与其他.NET语言实现流畅的互操作性。例如,C#和F#可以直接相互调用。这意味着F#可以立即访问所有.NET Framework API,例如Windows Presentation Foundation和DirectX。同样,在F#中开发的库可以从其他.NET语言中使用。

     

由于F#和OCaml共享相似的核心语言,因此一些OCaml库和应用程序可以直接交叉编译,也可以通过有条件编译的次要更改进行交叉编译。这提供了将现有OCaml代码交叉编译和/或移植到.NET的路径,并且还允许程序员在这些语言之间传输技能。该项目的一个主要重点是将类似OCaml的语言的范围扩展到传统上不使用它们的领域。在整个项目中,F#的设计师非常感谢Xavier Leroy和其他人在OCaml社区的支持和鼓励。

答案 6 :(得分:2)

本身并不是一个收缩包装的库,但是微软的Luca Bolognese有a series of blog posts,他在那里为元组,记录,类型联合等类型的函数编程构建了一个C#库:

Linq基本上是一个用于C#中具有语法支持的函数式编程库。

答案 7 :(得分:2)

答案 8 :(得分:0)

F#,微软提供了一个CTP版本。

答案 9 :(得分:-1)

要考虑的另一种选择是FuncSharp。它不像LanguageExt那样重,并且确实涵盖了最重要的模式/方面。