2

ラムダ式を使って関数合成を行う方法を知りたいです。つまり、2つの関数f(x)とg(x)があります。ラムダ式を使用してそれらの構成をf(g(x))にする方法は?ありがとう

4

3 に答える 3

2

あなたの質問は非常に簡潔で、うまくいくかどうかはわかりませんが、これがあなたに必要なものだと思います。

Func<int,int> compose(Func<int,int> f, Func<int,int> g)
{
    return x=>f(g(x));
}

var fg = compose(f,g);

Func<int,int> f = ....
Func<int,int> g = ....
Func<int,int> fg = compose(f,g);

C#の問題は、異なるメソッドシグネチャごとにそのような作成関数を作成する必要があるため、ジェネリックメソッドを使用して関数を作成できないことです。

于 2012-01-20T06:07:57.380 に答える
2

一般的なバージョン:

static Func<T, T> Compose<T>(params Func<T, T>[] ff)
{
  Func<T, T> id = x => x;

  foreach (var f in ff)
  {
    var i = f;
    var idd = id;
    id = x => i(idd(x));
  }

  return id;
}

C#には適切な字句スコープがないため、異なる名前の一時変数が大量に必要になります。

于 2012-01-20T06:09:39.670 に答える
2
Func<int, int> f = x => x + 1;
Func<int, int> g = x => x * 2;
Func<int, int> fg = x => f(g(x));

Console.WriteLine(fg(5));
于 2012-01-20T06:00:29.670 に答える