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);
}
}
Есть ли другой способ (/ лучший способ) сделать это?