94

誰かがラムダとは何かをうまく説明できますか? それらのタグがあり、それらは C# の秘密の質問にありますが、そもそもそれらが何であるかについての適切な定義と説明をまだ見つけていません。

4

7 に答える 7

135

クロージャ、ラムダ、および無名関数は、必ずしも同じものではありません。

無名関数とは、独自の名前を持たない (または少なくとも必要とする) 関数です。

クロージャは、変数がスコープ外になった後でも、宣言されたときにレキシカル スコープ内にあった変数にアクセスできる関数です。匿名関数は必ずしもクロージャーである必要はありませんが、ほとんどの言語にあり、そうでない場合はあまり役に立ちません。

ラムダは..コンピューターサイエンスに関する限り、あまり明確に定義されていません。多くの言語では、この用語さえ使用されていません。代わりに、クロージャーまたはアノン関数と呼ぶか、独自の用語を発明します。LISP では、ラムダは単なる無名関数です。Python では、ラムダは単一の式に限定された無名関数です。さらに、名前付き関数が必要です。ラムダは両方の言語のクロージャーです。

于 2008-09-29T19:12:54.160 に答える
19

クロージャーまたは無名関数とも呼ばれます。ここで最良の説明を見つけました。基本的に、関数に引数として渡すことができるコードのインライン ブロック。

于 2008-09-29T19:03:25.447 に答える
18

「ラムダ」は、ラムダ計算または特定のラムダ式を指します。ラムダ計算は、基本的に関数を扱う論理と数学の一分野であり、関数型プログラミング言語の基礎です。

~ ウィリアム・ライリー・ランド

于 2008-09-29T19:00:49.993 に答える
8

これは、インラインで宣言された単なる無名関数であり、本格的な関数を記述したくない場合にデリゲートに割り当てられるのが最も一般的です。

Lisp/scheme のような言語では、関数パラメーターとして非常に自由に渡されることがよくありますが、C# のイディオムでは、linq のように関数の遅延評価や、イベント処理コードを少し簡潔にするためだけにラムダが使用されることがよくあります。

于 2008-09-29T18:59:49.107 に答える
5

プログラミングには「ラムダ」のようなものは実際にはありません。言語などによって異なります。

要するに、通常、「ラムダを持つ」言語は、匿名関数または場合によってはクロージャーに用語を使用します。そのように、Ruby では:

f = lambda { return "this is a function with no name" }
puts f.call
于 2008-09-29T19:04:17.583 に答える
4

以前の回答への回答:
-無名関数について重要なことは、名前が必要ないということではありません。
-閉鎖は別の概念です。
-巨大なウィキペディアの記事は、これを明確にするものではありません.

3つの部分からなる私の答えは次のとおり
です。1.ラムダは、式でもある関数です。これは重要なことです。
2. いわゆる「ラムダ」を実装する多くの言語は、これらの短い関数をより簡単かつ迅速に記述できるようにするために、いくつかの構文糖衣を追加しますが、これは必須ではありません。
3. 一部の言語では、ラムダに副作用がないことが必要な場合があります。これは、機能的な意味でより純粋なラムダになります。

関数が式である場合、それは言語内の「第一級市民」です。私はそれですべての重要なことを行うことができます:

x = lambda(){ return "Hello World"; }

doit( 1, 2, lambda(a,b){ return a > b; }, 3 )

x = (lambda(a){ return a+1; }) + 5  // type error, not syntax error

(lambda(a,b){ print(a); log(b); })( 1, 2 )  // () is valid operator here
于 2011-08-17T07:42:19.883 に答える
1

ウィキペディアからの抜粋: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

Lisp や Python などのプログラミング言語では、ラムダは、ラムダ計算の使用法に従って、無名関数またはクロージャーを示すために使用される演算子です。

于 2008-09-29T18:59:09.513 に答える