我知道线性代数上有很多外部包,但我的问题是我什么时候使用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
如上所述,这可能过于简单,但在面对编程挑战时,我真的很难决定使用哪种语言。我什么时候使用哪个?
答案 0 :(得分:4)
正如评论中已经提到的,使用正确的工具。
现在,问题是,F#何时才是正确的工具。要获得有用的答案,从业务角度来看问题是很重要的 - 您面临的业务问题是什么?F#(或任何其他语言)可以帮助您解决这些问题吗?
我认为Don Syme的谈话Succeeding with functional-first languages in the industry从正确的角度看待这个问题。它着眼于开发分析组件的具体任务,并解释人们在这个领域通常面临的问题(正确性,复杂性,效率和上市时间)以及更好的语言如何帮助您克服这些问题(许多要点基于evidence collected by the F# foundation和之前的众多SO问题#1 #2)。
我认为通过比较相当简单的代码片段,你不会得到一个明确的答案,但你的例子证明:
IEnumerable<T>
并且实际上速度较慢这种情况)。如果您查看其他业务领域,那么您可能会发现不同的问题,然后您可以根据这些问题进行评估。但是对于分析组件(计算),我认为有很好的证据可以证明像F#这样的语言。