タグ付けされた質問 「lambda」

ラムダは、さまざまなプログラミング言語で使用できる匿名関数(つまり、クラスのメソッドのような識別子がない)です。

14
現代の主流のプログラミング言語でラムダ関数の人気が高まったきっかけは何ですか?
過去数年で、匿名関数(ラムダ関数)は非常に人気のある言語構成要素になり、ほぼすべての主要な/主流のプログラミング言語がそれらを導入するか、標準の次の改訂で導入する予定です。 しかし、匿名関数は、数学とコンピューターサイエンス(1936年頃に数学者のアロンゾ教会によって発明され、1958年からLispプログラミング言語で使用された、たとえばここを参照)で非常に古く、非常によく知られた概念です。 では、なぜ今日の主流のプログラミング言語(その多くは15年から20年前に生まれたもの)が、最初からラムダ関数をサポートし、後で導入しただけだったのでしょうか? そして、ここ数年で匿名機能が大々的に採用されたきっかけは何ですか?この現象を引き起こした特定のイベント、新しい要件、またはプログラミング手法はありますか? 重要な注意点 この質問の焦点は、現代のメインストリーム(したがって、いくつかの例外を除いて、機能しない)言語での匿名関数の導入です。また、匿名関数(ブロック)は関数型言語ではないSmalltalkに存在し、通常の名前付き関数はCやPascalなどの手続き型言語にも長い間存在していることに注意してください。 「機能的なパラダイムの採用とその利点」について話すことによって、あなたの答えを一般化しすぎないでください。これは問題のトピックではないからです。

3
ラムダとは何ですか、なぜ有用なのでしょうか?[閉まっている]
これまで私は聞いた: ラムダ計算 ラムダプログラミング ラムダ式 ラムダ関数 すべてが関数型プログラミングに関連しているようです... どうやらそれはC ++ 1xに統合されるので、今よりよく理解するかもしれません: http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions 誰かがラムダのことを簡単に定義して、それがどこで役立つかを教えてもらえますか?

3
Java 8でラムダ構文の代わりにメソッド参照構文を使用すると、パフォーマンス上の利点はありますか?
メソッド参照はラムダラッパーのオーバーヘッドをスキップしますか?将来的にはそうなるのでしょうか? メソッド参照に関するJavaチュートリアルによると: 時々...ラムダ式は既存のメソッドを呼び出すだけです。これらの場合、既存のメソッドを名前で参照する方が明確な場合がよくあります。メソッド参照により、これを行うことができます。これらは、既に名前を持っているメソッドのコンパクトで読みやすいラムダ式です。 いくつかの理由から、メソッド参照構文よりもラムダ構文の方が好きです。 ラムダはより明確です Oracleの主張にもかかわらず、メソッド参照構文があいまいであるため、ラムダ構文はオブジェクトメソッド参照の速記より読みやすいと思います。 Bar::foo xのクラスで静的な1引数のメソッドを呼び出してxを渡しますか? x -> Bar.foo(x) または、xで引数のないインスタンスメソッドを呼び出していますか? x -> x.foo() メソッド参照構文は、どちらの代わりにもなります。コードが実際に行っていることを隠します。 ラムダはより安全です クラスメソッドとしてBar :: fooを参照し、Barが後で同じ名前のインスタンスメソッドを追加した場合(またはその逆)、コードはコンパイルされなくなります。 ラムダを一貫して使用できます 任意の関数をラムダでラップできます。そのため、どこでも同じ構文を一貫して使用できます。メソッド参照構文は、プリミティブ配列を取得または返すメソッド、チェックされた例外をスローするメソッド、またはインスタンスと静的メソッドとして使用されるメソッド名が同じメソッドでは機能しません(メソッド参照構文が呼び出されるメソッドについて曖昧だからです) 。同じ数の引数を持つメソッドをオーバーロードした場合は機能しませんが、とにかくそれを行うべきではないため(Josh Blochの項目41を参照)、メソッド参照に対してそれを保持することはできません。 結論 パフォーマンスの低下がない場合は、IDEで警告をオフにし、メソッド参照をコードに散在させることなくラムダ構文を一貫して使用したいと思います。 PS ここでもそこでもありませんが、私の夢では、オブジェクトメソッドの参照は次のように見え、ラムダラッパーなしでメソッドに対してinvoke-dynamicを直接適用します。 _.foo()

6
関数とラムダの違いは何ですか?
「関数」と「ラムダ」について少し混乱しています。スキームキーワードlambdaがJavaScriptキーワードfunctionと非常によく似ていることを示す例をいくつか見ましたが、それらがどのように関連しているかはわかりません。 .netでオブジェクトについて話す場合、「関数」と「メソッド」は同じ意味で使用できると言われています。「ラムダ」と「関数」が同じことを意味するのか疑問に思っています。ギリシャ文字のラムダ(λ)がこのサイトの非常に多くのアバターに登場しているのを見て、「ラムダ」には難解な意味があるのだろうか。物事をさらに混乱させるために、.netでは、C#の機能部分は別の関数に渡される関数式を「ラムダ式」と呼んでいます。 また、「ラムダ計算」という用語に漠然と精通しています。 関数とラムダの違いは何ですか?

6
Javaで可能な限りラムダ式を使用していますか?
私は最近、Java 8で導入されたLambda式を習得しました。関数型インターフェースを使用するときはいつでも、関数型インターフェースを実装するクラスを作成する代わりに、常にLambda式を使用する傾向があります。 これは良い習慣と考えられていますか?または、機能インターフェイスにLambdaを使用することが適切でない状況ですか?
52 java  lambda 

5
Pythonが複数行のラムダを許可しないのはなぜですか?
BDFLがPythonラムダを単一行にすることを選択した具体的な理由を誰かが説明できますか? これはいい: lambda x: x**x これによりエラーが発生します。 lambda x: x**x ラムダを複数行にすると、通常のインデント規則が何らかの形で「乱れ」、例外を追加する必要があることを理解していますが、それだけのメリットはありませんか? たとえば、JavaScriptを見てください。これらの匿名関数なしでどのように生きることができますか?彼らは不可欠です。Pythonistasは、引数として渡すためにすべての複数行関数に名前を付ける必要をなくしたくないですか?
50 lambda  python 

3
「究極のラムダ」というフレーズの起源と意味は何ですか?
私は数年前から関数型プログラミング言語をいじり続けてきましたが、このフレーズに出会っています。たとえば、これは「The Little Schemer」の章であり、これは確かにこの名前でブログに先行します(いいえ、この章は私の質問に答える助けにはなりません。) 私はラムダの意味を理解しています。匿名関数の概念はシンプルかつ強力ですが、このコンテキストで「究極」が何を意味するのか理解できません。 私がこのフレーズを見た場所: The Little Schemerの第8章のタイトル ブログ:http : //lambda-the-ultimate.org/ 一連の「Lambda the ultimate X」ペーパー:http : //library.readscheme.org/page1.html ここに参照がありませんが、誰か助けてもらえますか?

10
LINQおよびLambda Expressionsを使用すると、コードが読みにくくなりますか?[閉まっている]
私はLinqの同僚と議論しています。ここにコピーします: 同僚:ここで正直に話しましょう。Linq構文はダメです。わかりにくく直感的ではありません。 私:ああ、T-SQLよりも混乱しますか? 同僚:ええ、はい。 私:それは同じ基本的なパーツ、select、where、fromを持っています 同僚:私にとって、Linqはリレーショナル+ OOのろくでなしです。同僚:誤解しないでください。信じられないほど強力ですが、SQLを再利用してオブジェクトコレクションを使用しました。 私は、Linq + Lamdaを使用することは非常に強力であり(彼は同意します)、またコードを読みやすくします(彼はその点で同意しません)と思います。 pickFiles = from f in pickFolder.GetFiles("*.txt") where ValidAuditFileName.IsMatch(f.Name) select f; または var existing = from s in ActiveRecordLinq.AsQueryable<ScannedEntity>() where s.FileName == f.FullName && s.DocumentType != "Unknown" select s; または(VBコードはこちら) Dim notVerified = From image In images.AsParallel Group Join verifyFile In …

5
ラムダ式は、単一のメソッドを持つ匿名の内部クラス以上のものですか?
Java 8には、待望のラムダ式に関する新しい誇大宣伝があります。3日ごとに、彼らがいかにクールであるかについての別の記事が表示されます。 私が理解している限り、ラムダ式は(少なくともバイトコードレベルで)単一メソッドを持つ匿名内部クラスにすぎません。これに加えて、別の優れた機能があります-型推論ですが、これと同等の機能は、あるレベルのジェネリックで実現できると信じています(もちろん、ラムダ式のようなきちんとした方法ではありません)。 これを知っていると、ラムダ式は単なるJavaの構文糖衣以上のものをもたらすでしょうか?現在の言語機能では構築できないラムダ式を使用して、より強力で柔軟なクラスやその他のオブジェクト指向の構造を作成できますか?

3
forループの代わりに「機能的操作」を使用する必要があるのはなぜですか?
for (Canvas canvas : list) { } NetBeansは、「機能的操作」を使用することを提案しています。 list.stream().forEach((canvas) -> { }); しかし、なぜこれが好ましいのでしょうか?どちらかといえば、読みやすく、理解しにくいです。を呼び出してからstream()、forEach()パラメーター付きのラムダ式を使用していますcanvas。for最初のスニペットのループよりも優れていることはわかりません。 明らかに、私は美学だけについて話している。おそらく、ここには技術的な利点がありますが、私には欠けています。それは何ですか?代わりに2番目の方法を使用する必要があるのはなぜですか?

1
Java 8の型推論
Java 8 での新しいラムダ表記(たとえば、この記事を参照)の導入には、ある種の型推論が必要になりますか? もしそうなら、新しい型システムはJava言語全体にどのような影響を与えますか?

3
Closures / Lambdas /…に対するC#、Java、Scalaのアプローチのメリットとデメリットは何ですか?
Project Lambda(JSR 335)のメーリングリストに送信されたBrian Goetzの電子メールPeek Past lambdaで表明された実装のアイデアと懸念と、C#とScalaの技術的な実装の違いは何ですか? メールから: 「たぶんラムダは単に内部クラスのインスタンスであるべきで、それは本当にシンプルだろう」という道を探りましたが、最終的には「関数は言語の未来にとってより良い方向である」という立場になりました。 そしてさらに: 世界のオブジェクトであるラムダは、この将来の可能性と矛盾しています。ラムダは関数の世界観ではありません。この柔軟性を維持することは、ラムダにオブジェクト性の外観でさえ負荷をかけないことを支持するポイントの1つです。 結論: Lambdas-are-functionsはドアを開きます。Lambdas-are-objectsはそれらを閉じます。 これらのドアが開いたままになるのを好む。 また、Redditスレッドのユーザーからのコメントは次のとおりです。 私は実際にこれについてNeal Gafterにメールしました。彼の説明についての私の限られた理解では、C#と現在のJavaデザインは、デリゲートは実際にはオブジェクトであり、関数型ではありません。JavaはC#のラムダの短所から学び、それらを避けるべきだと彼は信じているようです(C#がJavaの短所から学び、最初にそれらを避けたように)。 「Lambdas-are-functions」アプローチが「Lambdas-are-objects」よりも多くの機会を将来可能にするのはなぜですか?誰かがどのような違いが存在し、それらがコードの記述方法にどのように影響するかを説明できますか? Scalaの物事が「うまくいく」ことを見て、C#/ Java(8)で採用/提案されているアプローチについて何かが欠けていると考え続けています。
30 c#  java  scala  lambda  closures 

11
ビジネスソフトウェアでラムダ関数またはメソッドを使用することは許容されますか?
ここで、デリゲート\ラムダ関数を使用して、中間のアイデアの穴を多くの繰り返しなしで解決することを示す投稿に気付きました:http : //www.markhneedham.com/blog/2009/04/04/functional-c -中間の穴のパターン/ 問題は、ジュニア開発者や他の人が必ずしも関数pointer \ delegate \ lambda関数の概念が何であるかを理解していないため、コードの読み取り(およびデバッグ)が難しくなるようです。 特に小さなチームや単独のデベロッパーショップで、ビジネスソフトウェアを作成する際にこのツールの使用を回避または厳しく制限する必要がありますか? または、適切なコメントを付けて使用して、次の開発者がラムダ関数について理解または学習することをもはや期待していないことを期待できますか?
26 lambda 

1
Haskellに型レベルのラムダ抽象化がないのはなぜですか?
それにはいくつかの理論的な理由(型チェックや型推論が決定不能になるなど)か、実際的な理由(適切に実装するのが難しすぎる)がありますか? 現在、我々はに物事をラップすることができますnewtypeように newtype Pair a = Pair (a, a) そして、持っている Pair :: * -> * しかし、私たちのようなことはできませんλ(a:*). (a,a)。 (例えば、Scalaが持っているような、それらを持っているいくつかの言語があります。)

5
ラムダ計算におけるλx.λf.fx(逆適用のような)の名前は何ですか?対応する関数にはプログラミングの標準名がありますか?
ラムダ計算におけるλx.λf.fxの名前は何ですか? 対応する関数は、Haskellのような関数型プログラミング言語の標準名を持っていますか? オブジェクト指向プログラミングではfoo、引数として関数を受け取るメソッドに通常の名前がありx.foo(f)ますf(x)か?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.