例如,在Java中有Functional Java和Higher-Order Java。两者本质上都提供了一个小API来处理高阶,curried函数,也许还有一些新的数据类型(元组,不可变列表)。
答案 0 :(得分:9)
LanguageExt看起来非常有望使C#中的函数式编程更容易。
答案 1 :(得分:5)
你看过F#吗?
另一个简洁的博客文章是here,讨论如何使用c#3.0中内置的新泛型/ lambda表达式。
如果您只是使用System.Linq添加到源文件的顶部,那么添加了许多很好的新函数来处理诸如折叠/过滤等的集合。
答案 2 :(得分:5)
假设您无论出于何种原因都不能使用F#,只是想在C#代码中使用功能范例和习惯用法来提高质量和性能。可靠性:
Functional style pattern matching for C#
还有'elevate'有一些功能性的东西,如选项类型(maybes)等。
答案 3 :(得分:2)
我想你想要F#
此外,最新版本的C#在基础语言中包含了许多功能概念。
答案 4 :(得分:2)
C#可能有这样的库,但你应该考虑使用F#http://research.microsoft.com/fsharp/fsharp.aspx和http://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那样重,并且确实涵盖了最重要的模式/方面。