ラムダとは何ですか?


93

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


1
どの程度Wikipediaのラムダ計算の記事開始のために?次に、Wikipediaの関数型プログラミングに関する記事をフォローアップとして掲載します。
Thorsten79


ここでアムダ式が 美しく説明されました
Jameer Mulani 2017

回答:


135

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

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

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

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



うわー、私はこの質問をするために複数の賛成票を持っていました。専門用語で多くの技術的回答が行き詰まっているのを見てきましたが、これは簡潔であり、すぐにポイントになります。
Matthew Stopa

8
+1は、「閉じる」という用語を使用して、クロージャーを明確にするかのように定義します
ダニエル

5
コードの構造によって(つまり字句的に)定義された変数が存在できる領域(つまり、スコープ)。たとえば、ほとんどの言語では、関数は字句スコープを定義します。関数の内部で宣言された変数は、その外部ではアクセスできません。
Eevee

19

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



8

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

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


5

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

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

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

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

1

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

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


LispやPythonなどのプログラミング言語では、ラムダはラムダ計算の使用法に従って、匿名関数またはクロージャを示すために使用される演算子です。私はすでに記事をスキャンしましたが、それを逃しました。
フレッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.