【问题标题】:Is there a Functional Programming library for .NET?.NET 有函数式编程库吗?
【发布时间】:2010-09-10 04:13:12
【问题描述】:

例如,Java 中有Functional JavaHigher-Order Java。两者本质上都提供了一个小的 API,用于操作高阶柯里化函数,也许还有一些新的数据类型(元组、不可变列表)。

【问题讨论】:

    标签: c# .net functional-programming


    【解决方案1】:

    我想你想要F#

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          如果您正在寻找扩展 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 社区中其他人的支持和鼓励。

          【讨论】:

            【解决方案5】:

            你看过F#吗?

            here 也是一篇简洁的博文,其中讨论了如何使用内置于 c# 3.0 中的新通用/lambda 表达式。

            如果您只是将 using System.Linq 添加到源文件的顶部,则会添加很多不错的新功能来处理集合,例如折叠/过滤/等。

            【讨论】:

              【解决方案6】:

              本身不是一个收缩包装的库,但 Microsoft 的 Luca Bolognese 拥有 a series of blog posts,他在其中构建了一个 C# 库,用于使用元组、记录、类型联合等类型进行函数式编程:

              Linq 基本上也是一个函数式编程库,在 C# 中具有语法支持。

              【讨论】:

                【解决方案7】:

                【讨论】:

                  【解决方案8】:

                  假设您出于某种原因不能使用 F#,而只想在 C# 代码中使用函数式范例和习语来提高质量和可靠性:

                  Functional style pattern matching for C#

                  Monad library for C#/.Net

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

                  【讨论】:

                    【解决方案9】:

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

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

                    【讨论】:

                      【解决方案10】:

                      另一个需要考虑的选项是FuncSharp。它不像 LanguageExt 那样繁重,它确实涵盖了最重要的模式/方面。

                      【讨论】:

                        猜你喜欢
                        • 2015-11-21
                        • 2017-12-16
                        • 2010-12-19
                        • 2013-07-24
                        • 2011-04-27
                        • 2010-09-06
                        • 2016-04-09
                        • 1970-01-01
                        • 2011-02-17
                        相关资源
                        最近更新 更多