例如,在 Java 中有Functional Java和Higher-Order Java。两者本质上都提供了一个小的 API,用于操作高阶、柯里化函数,也许还有一些新的数据类型(元组、不可变列表)。
10 回答
LanguageExt 看起来很有希望让 C# 中的函数式编程更容易。
假设您出于某种原因不能使用 F#,而只想在 C# 代码中使用函数式范例和习语来提高质量和可靠性:
还有“提升”,它有一些功能性的东西,比如选项类型(也许)等。
我想你想要F#
此外,最新版本的 C# 在基础语言中包含许多功能概念。
可能有这样一个 C# 库,但您可能应该考虑只使用 F# http://research.microsoft.com/fsharp/fsharp.aspx和http://msdn.microsoft.com/en-us/fsharp/default .aspx。
Microsoft 计划使 F# 成为 Visual Studio 中的一流语言,因此使用其中一个 CTP 构建初始内容的风险应该很小。
如果您正在寻找扩展 C# 的东西,那么没有,但是有 F#,它是一种基于 .NET 的函数式语言。从“关于 F#”页面:
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 社区中其他人的支持和鼓励。
本身不是一个收缩包装的库,但 Microsoft 的 Luca Bolognese 有一系列博客文章,他在其中构建了一个用于函数式编程的 C# 库,其中包含元组、记录、类型联合等类型:
此外,Linq 基本上是一个在 C# 中具有语法支持的函数式编程库。
F#,微软提供了一个 CTP 版本。
另一个要考虑的选择是FuncSharp。它不像 LanguageExt 那么重,它确实涵盖了最重要的模式/方面。