24

ラムダ式は実際には取得しません。それらはALGOLの時代から存在していましたが、PythonとRubyが非常に人気になったごく最近まで、私はそれらについて聞き始めませんでした。C#に=>構文が追加されたので、私の世界(.NET)の人々はますますlamdba式について話し合っています。

ラムダ計算に関するウィキペディアの記事を読んだことがありますが、私は実際には数学者ではありません。実用的な観点からはよくわかりません。ラムダ式はいつ使用しますか?なんで?それが私がすべきことだとどうやって知ることができますか?

ラムダ式の問題を前後の形式で解決する方法の例を示していただけますか?命令型言語であれば問題ありませんが、C#が最も理解しやすいでしょう。

4

6 に答える 6

22

基本的に、C#に関する限り、ラムダ式はデリゲート(または式ツリーですが、とりあえずそれらは脇に置いておきましょう)を作成する簡単な方法です。

C#1では、通常のメソッドからのみデリゲートインスタンスを作成できました。C#2では、匿名メソッドを取得しました。C#3では、より簡潔な匿名メソッドのようなラムダ式を取得しました。

1つの値を取り、値を返すロジックを表現する場合は、特に簡潔です。たとえば、LINQのコンテキストでは次のようになります。

                       // Only include children - a predicate
var query = dataSource.Where(person => person.Age < 18) 
                       // Transform to sequence of names - a projection
                      .Select(person => person.Name);

クロージャーに関する私の記事には、他の側面とともに、これについてのより完全な議論があります。

于 2008-10-09T14:08:38.893 に答える
3

この質問への回答はあなたに役立つかもしれません。

于 2008-10-09T14:06:57.117 に答える
2

ラムダ関数は単なる無名関数です。

たとえば、Pythonでは、リスト内のすべての要素を2倍にします。これを行うには、ほぼ3つの方法があります。

リスト式:

[2*x for x in list]

明示的な関数:

def double(x):
    return 2*x
map(double, list) # iirc

ラムダを使用:

double = lambda x : 2*x
map(double, list)

したがって、ほとんどの言語のラムダは、新しい関数を作成する際の構文上のオーバーヘッドを回避する方法にすぎません。

于 2008-10-09T14:11:19.293 に答える
1

これは、C#でラムダ式を使用する際の大きなアイデアを理解する方法について私が見たより良い説明の1つです。

http://www.developingfor.net/c-30/upgrade-your-c-skills-part-3-lambda-expressions.html

于 2008-10-09T14:11:55.437 に答える
0

.NETでのラムダ式の主な用途は、リストを操作するときです。ラムダ式を使用すると、データベーステーブルを検索するSQLステートメントを作成するのと同様の方法で、リストにクエリを作成できます。

于 2008-10-09T14:09:31.730 に答える
0

ラムダ式は関数値です ('int' と 'string' が値であるのと同じ意味で)。これは、次のことが可能であることを意味します。

  • ラムダ式を保持する変数を定義します (これは関数を定義するのと同じです)
  • メソッドまたは関数からラムダ式を返す
  • ラムダ式を引数として関数またはメソッドに送信する

map、filter、fold などの関数 (任意の関数型言語) を見て、ラムダ式が他の関数の引数としてどのように使用されているかを確認してください。

于 2008-10-09T14:18:20.073 に答える