c# - 在 C# 中生成函数的最佳生成函数的方法

标签 c# f# functional-programming

F# 提供了一个功能,一个函数可以返回另一个函数。

在 F# 中生成函数的一个例子是:

let powerFunctionGenarator baseNumber = (fun exponent -> baseNumber ** exponent);

let powerOfTwo = powerFunctionGenarator 2.0;

let powerOfThree = powerFunctionGenarator 3.0;

let power2 = powerOfTwo 10.0;
let power3 = powerOfThree 10.0;

printfn "%f" power2;
printfn "%f" power3;

我想出的在 C# 中实现相同目的的最佳方法是:

class Program
{
    delegate double PowerOf2(double exponent);
    delegate double PowerOf3(double exponent);
    delegate double PowerOfN(double n, double exponent);

    static void Main(string[] args)
    {
        PowerOfN powerOfN = (a, b) => { return Math.Pow(a,b) ; };
        PowerOf2 powerOf2 = (a) => { return powerOfN(2, a); };
        PowerOf3 powerOf3 = (a) => { return powerOfN(3, a); };

        double result = powerOf2(10);
        Console.WriteLine(result);
        result = powerOf3(10);
        Console.WriteLine(result);
    }
}

还有其他方法(/更好的方法)吗?

最佳答案

当然,这在 C# 中很简单:

using System;
class P
{
  static void Main()
  {
      Func<double, Func<double, double>> powerFunctionGenerator = 
          baseNumber => exponent => Math.Pow(baseNumber, exponent);  

      Func<double, double> powerOfTwo = powerFunctionGenerator(2.0);
      Func<double, double> powerOfThree = powerFunctionGenerator(3.0);
      double power2 = powerOfTwo(10.0); 
      double power3 = powerOfThree(10.0);
      Console.WriteLine(power2); 
      Console.WriteLine(power3);
  }
}

简单易行。如果您不喜欢 list 类型,其中大部分可以替换为 var

关于c# - 在 C# 中生成函数的最佳生成函数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8983485/

相关文章:

图表:chart.ChartAreas.add 抛出异常:System.NotImplementedException

f# - Excel Dna/F 中的多态性#

c# - 使用本地磁盘中的字体文件

使用 F# 进行 XML 序列化

scala - 将高阶函数转换为匿名函数的正确 Scala 语法?

ruby - 在 Ruby 中传递任意数量的 lambda(或 proc)

multithreading - Haskell 中的生产者和消费者问题?

c# - 不在某些控件上使用 setter 属性

c# - MVC + EntityFramework + 字段验证

c# - 添加 HttpClient header 会生成具有某些值的 FormatException