【发布时间】:2010-09-10 04:13:12
【问题描述】:
例如,Java 中有Functional Java 和Higher-Order Java。两者本质上都提供了一个小的 API,用于操作高阶柯里化函数,也许还有一些新的数据类型(元组、不可变列表)。
【问题讨论】:
标签: c# .net functional-programming
例如,Java 中有Functional Java 和Higher-Order Java。两者本质上都提供了一个小的 API,用于操作高阶柯里化函数,也许还有一些新的数据类型(元组、不可变列表)。
【问题讨论】:
标签: c# .net functional-programming
我想你想要F#
此外,较新的 C# 版本在基本语言中包含许多功能概念。
【讨论】:
F#,微软提供了一个 CTP 版本。
【讨论】:
可能有这样的 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#”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 社区中其他人的支持和鼓励。
【讨论】:
本身不是一个收缩包装的库,但 Microsoft 的 Luca Bolognese 拥有 a series of blog posts,他在其中构建了一个 C# 库,用于使用元组、记录、类型联合等类型进行函数式编程:
Linq 基本上也是一个函数式编程库,在 C# 中具有语法支持。
【讨论】:
【讨论】:
假设您出于某种原因不能使用 F#,而只想在 C# 代码中使用函数式范例和习语来提高质量和可靠性:
Functional style pattern matching for C#
还有'elevate',它有一些功能性的东西,比如选项类型(可能)等等。
【讨论】:
LanguageExt 看起来非常很有希望让 C# 中的函数式编程更容易。
【讨论】:
另一个需要考虑的选项是FuncSharp。它不像 LanguageExt 那样繁重,它确实涵盖了最重要的模式/方面。
【讨论】: