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

15
カレーの利点は何ですか?
私はカレーについて学んだばかりで、コンセプトを理解しているとは思いますが、それを使用することに大きな利点はありません。 些細な例として、2つの値を追加する関数を使用します(MLで記述)。カレーなしのバージョンは fun add(x, y) = x + y と呼ばれます add(3, 5) カレー版は fun add x y = x + y (* short for val add = fn x => fn y=> x + y *) と呼ばれます add 3 5 私は、関数の定義と呼び出しから括弧のセットを削除する構文糖衣のように思えます。カリー化は関数型言語の重要な機能の1つとして挙げられてきましたが、現時点ではそれに少々困惑しています。タプルをとる関数の代わりに、それぞれ単一のパラメーターを消費する関数のチェーンを作成するという概念は、単純な構文の変更に使用するのはかなり複雑に思えます。 わずかに単純な構文がカリー化の唯一の動機ですか、それとも私の非常に単純な例では明らかではない他の利点がありませんか?カレーは単なる構文糖ですか?

1
メソッドごとに1つのパラメーターのみを必要とする連鎖メソッドは、カリー化と同等ですか?
私は最近Rubyをいじくり回しており、純粋なオブジェクト指向言語(および純粋ではないものでも)で1つのパラメータのみを取り、連鎖するメソッドを作成することは、スタイル?そうでない場合は、なぜですか?この件に関する詳細かつ厳密な回答をいただければ幸いです。

3
カレー機能と可変機能を同時に使用することはできますか?
動的に型付けされた関数型プログラミング言語でカリー化関数と可変関数の両方を使用可能にすることを考えていますが、可能かどうかは疑問です。 擬似コードは次のとおりです。 sum = if @args.empty then 0 else @args.head + sum @args.tail これはすべての引数を合計することになっています。次に、それsum自体が数値として扱われる場合、結果はになり0ます。例えば、 sum + 1 +数値でのみ機能すると仮定して、1に等しくなります。ただし、sum == 0true であっても、sum引数がいくつ与えられても(したがって、「部分的に適用」と「可変」が同時に)、たとえば g = sum 1 2 3 その後gに等しく6、しかし、我々はまだ、さらに適用することができますg。たとえば、g 4 5 == 15trueです。この場合、オブジェクトgをリテラル6で置き換えることはできません。整数として扱われた場合は同じ値を生成しますが、内部には異なるコードが含まれているためです。 この設計を実際のプログラミング言語で使用すると、混乱やあいまいさが生じますか?

4
カレーや部分塗布の何が特別ですか?
私は関数型プログラミングに関する記事を毎日読んでおり、可能な限りいくつかのプラクティスを適用しようとしています。しかし、私はカレーや部分的なアプリケーションで何がユニークなのか理解していません。 例として、このGroovyコードを見てみましょう。 def mul = { a, b -> a * b } def tripler1 = mul.curry(3) def tripler2 = { mul(3, it) } 私は違いが何であるかを理解していないtripler1とtripler2。どちらも同じではないですか?「カレー化」は、Groovy、Scala、Haskellなどの純粋または部分的な関数型言語でサポートされています。ただし、別の名前付きまたは匿名を作成するだけで、同じこと(左カレー、右カレー、nカレー、または部分アプリケーション)を実行できます。tripler2ほとんどの言語(Cでも)でパラメーターを元の関数(など)に転送する関数またはクロージャー ここで何か不足していますか?Grailsアプリケーションでカレーや部分的なアプリケーションを使用できる場所はありますが、「どうして違うの?」 教えてください。 編集:皆さんは、デフォルトのパラメーターを元の関数に転送する別の関数を作成/呼び出すよりも、部分的なアプリケーション/カリー化が単に効率的であると言っていますか?

2
カレー機能の実際の使用例は?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 カレー機能の実際の使用例を見つけ、カレーを使用するメリットを得るのに苦労しました。 カレー機能をググると、次のような例がよく見られます let add = x => y => x + y; let add10 = add(10); console.log(add10(20)); この例ではカレーを使用することの価値が本当にわからないのです。 このSO /programming/113780/javascript-curry-what-are-the-practical-applicationsの回答を読んだ後でも、それを使用する利点がわかりません。 たとえば、最高得点の回答はコンバーターの例ですが、別の回答が示すように、その例はカレーなしで書き直すことができます。 私も答えを読みますカレーの利点は何ですか?(議論はjavascriptに限定されていませんが)カリーバージョンはjsで)カリーなしで書き直すことができるという感覚を私はまだ得ています。 それで、誰かが私にJavaScriptでカレーを使用することの「本当の」利点/利点を示すことができますか? ----更新---- 私が得た答えを除いて、私はここでログの例を見つけ、それを使用する利点を示しています。

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