高階関数の組み合わせに関するブログ記事を読んでいたところ、「カリー化」の C# の例が提供されていました。
例は次のようになります。
public static Func<T1, Func<T2, T3>> Curry<T1, T2, T3>
(Func<T1, T2, T3> function)
{ return a => b => function(a, b); }
public static Func<T1, Func<T2, Func<T3, T4>>> Curry<T1, T2, T3, T4>
(Func<T1, T2, T3, T4> function)
{ return a => b => c => function(a, b, c); }
public static Func<T1, Func<T2, Func<T3, Func<T4, T5>>>> Curry<T1, T2, T3, T4, T5>
(Func<T1, T2, T3, T4, T5> function)
{ return a => b => c => d => function(a, b, c, d); }
私の質問は、同じ「カリー化された形式」の結果を効果的に生成する他の形式をとるメソッドをカリー化と見なすことができるかということです。
たとえば、次のメソッドはカリー化と見なされますか? そうでない場合、より適切な命名規則は何ですか?
public static Func<T1, Func<T2, Func<T3, Func<T4, T5>>>> SomethingLikeCurry<T1, T2, T3, T4, T5>
(Func<T1, T2, Func<T3, T4, T5>> function)
{ return a => b => c => d => function(a, b)(c, d); }
public static Func<T1, Func<T2, Func<T3, T4>>> SomethingLikeCurry<T1, T2, T3, T4>
(Func<T1, T2, Func<T3, T4>> function)
{ return a => b => c => function(a, b)(c); }