1

我知道线性代数上有很多外部包,但我的问题是我什么时候使用 f#,什么时候使用 c#?我做了一个简单的例子,当我这样做时,我意识到它可能太简单了。但是可以说我想对两个数组进行逐个元素的划分:

命令式c#:

   static double[] elementdivideimp (double[] arr1, double[] arr2)
    {
        var res = new double[arr1.Length];
        for (int i = 0; i < arr1.Length; i++)
        {
            res[i] = arr2[i]/arr1[i];
        }
        return res;
    }

LINQ C#:

static double[] elementdivideL(double[] arr1, double[] arr2)
    {
        return arr1.Zip(arr2, (a, b) => b/a).ToArray();
    }

F#:

let elementdividefunc a b = Array.map2 (fun i j -> (j / i)) a b 

如前所述,也许这太简单了,但是当我面临编程挑战时,我真的很难决定选择哪种语言。那么我什么时候使用哪个?

4

1 回答 1

4

正如评论中已经提到的,为工作使用正确的工具

现在,问题是,什么时候 F# 才是适合这项工作的工具。要获得有用的答案,从业务角度看待问题很重要——您面临哪些业务问题,F#(或任何其他语言)可以帮助您解决这些问题吗?

我认为 Don Syme 的演讲在行业中使用功能优先语言取得成功是从正确的角度看待这个问题的。它着眼于开发分析组件的具体任务,并解释了人们在该领域通常面临的问题(正确性、复杂性、效率和上市时间)以及更好的语言如何帮助您克服这些问题(许多要点都是基于关于F# 基金会收集的证据和许多早期的 SO 问题#1 #2)。

我认为仅通过比较相当简单的代码片段,您不会得到明确的答案,但是您的示例表明:

  • F# 代码通常更简洁,这可能会缩短上市时间
  • 与命令式 C# 相比,您不需要处理极端情况,这有助于正确性
  • 您可以轻松地使用数组等数据结构,因此您的代码更高效(我没有对此进行测试,但我认为 C# 代码使用IEnumerable<T>并且在这种情况下实际上会更慢)。

如果您查看其他业务领域,那么您可能会发现不同的问题,然后您可以根据这些问题进行评估。但是对于分析组件(计算),我认为对于像 F# 这样的语言有很好的证据。

于 2013-10-07T19:24:31.287 回答