c# - 在数学方面,F# 真的比 C# 好吗?

标签 c# math f#

尽管是非托管语言,但在实现数学方面,F# 真的比 C# 好吗?如果是这样,为什么?

最佳答案

我认为大部分要点已经被其他人提到了:

  1. F# 可让您以数学家思考问题的方式解决问题
  2. 多亏了高阶函数,您可以使用更简单的概念来解决难题
  3. 默认情况下一切都是不可变的,这使得程序更容易理解(也更容易并行化)

确实可以在 C# 3.0 中使用某些 F# 概念,但也有限制。您不能使用任何递归计算(因为 C# 没有尾递归),这就是您以函数/数学方式编写原始计算的方式。此外,在 C# 中编写复杂的高阶函数(将其他函数作为参数)很困难,因为您必须显式编写类型(而在 F# 中,类型是推断的,但也会自动泛化,因此您不必显式地使泛型函数)。

此外,我认为 Marc Gravell 的以下观点不是有效的反对意见:

From a maintenance angle, I'm of the view that suitably named properties etc are easier to use (over full life-cycle) than tuples and head/tail lists, but that might just be me.

这当然是事实。然而,F# 的伟大之处在于,您可以开始使用元组和头/尾列表编写程序,然后在开发过程中将其转换为使用 .NET IEnumerables 和具有属性的类型的程序(我相信典型的 F#程序员工作*)。元组等和 F# 交互式开发工具为您提供了一种快速构建解决方案原型(prototype)的好方法(在进行数学运算时,这是必不可少的,因为大多数开发只是在您寻找最佳解决方案时进行试验)。获得原型(prototype)后,您可以使用简单的源代码转换将代码包装在 F# 类型中(也可以从 C# 中用作普通类)。 F# 还为您提供了很多稍后在性能方面优化代码的方法。

这让您受益于易于使用的语言(例如 Python),许多人将其用于原型(prototype)设计阶段。但是,使用高效语言(例如 C++ 或 C#)完成原型(prototype)设计后,您不必稍后重写整个程序,因为 F# 既“易于使用”又“高效”,并且您可以流畅地切换介于这两种风格之间。

(*) 我也在我的 functional programming book 中使用了这种样式.

关于c# - 在数学方面,F# 真的比 C# 好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/379722/

相关文章:

C#,如何隐藏一种形式并显示另一种形式?

c# - MonoTouch - 重用 UIAlertVIew?

javascript - Ajax 调用工作很慢。可以让它更快吗?

javascript - 将坐标转换为等距坐标,反之亦然不起作用

generics - F# 编译器在 currying 时从首次使用泛型函数推断具体类型

c# - 使用 XmlDictionaryReader 从消息中获取值

math - 给定一个角度,我如何使用 x 和 y 找到行进线的逻辑? (数学难题)

javascript - 如何用JS制作一个计算模块(数学)?

f# - FAKE Fsc 任务正在将构建产品写入错误的目录

parsing - 使 OperatorPrecedenceParser 解析 Optional (opt) 表达式