c# - 逐个元素除法或乘法 - c# 与 f# 比较

标签 c# linq f#

<分区>

我知道有很多关于线性代数的外部包,但我的问题是什么时候使用 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();
    }

#:

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

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

最佳答案

如评论中所述,使用正确的工具来完成工作

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

我觉得聊Succeeding with functional-first languages in the industry Don Syme 从正确的角度看待这个问题。它着眼于开发分析组件的具体任务,并解释了人们在该领域通常面临的问题(正确性、复杂性、效率和上市时间)以及更好的语言如何帮助您克服这些问题(许多要点都是基于 evidence collected by the F# foundation 和许多早期的 SO 问题 #1 #2 )。

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

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

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

关于c# - 逐个元素除法或乘法 - c# 与 f# 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232582/

相关文章:

javascript - 使用 jquery 访问 Asp.net 控件(所有选项)

c# - 将字典分成更小的部分

c# - 读取复杂的 XML 属性

f# - 具有临时类型的元组序列?

函数返回类型中的 F# 多态性

c# - 代表时间的最佳类(class)

c# - 我如何创建 LiveConnectClient 的实例?

c# - 将 C++ 代码导出为 DLL 并使用 C# 导入?

c# - HttpBasicAuthenticator 身份验证问题

c# - Linq distinct 无法正常工作