尽管是非托管语言,但在实现数学方面,F# 真的比 C# 好吗?如果是这样,为什么?
最佳答案
我认为大部分要点已经被其他人提到了:
- F# 可让您以数学家思考问题的方式解决问题
- 多亏了高阶函数,您可以使用更简单的概念来解决难题
- 默认情况下一切都是不可变的,这使得程序更容易理解(也更容易并行化)
确实可以在 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/