web-dev-qa-db-ja.com

ラムダとは何ですか?

誰かがラムダが何であるかについての良い説明を提供できますか?私たちにはそれらのタグがあり、それらはC#の質問の秘密にありますが、私はそれらが最初に何であるかについての良い定義と説明をまだ見つけていません。

92
Fred

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

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

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

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

133
Eevee

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

19
Gulzar Nazim

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

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

17
wprl

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

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

8
JasonTrue

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

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

f = lambda { return "this is a function with no name" }
puts f.call
5
rfunduk

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

これは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
3
cmeub

ウィキペディアからクリップ: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_Word

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

1
Mesh