問題タブ [currying]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Scalaでのカリー化の2つの方法。それぞれのユースケースは何ですか?
私が管理しているScalaスタイルガイドで複数のパラメーターリストについて話し合っています。カリー化には2つの方法があることに気づきましたが、その使用例は何でしょうか。
スタイルガイドは、明らかにそうではないのに、これらは同じであると誤って示唆しています。このガイドは、作成されたカリー化関数について説明しようとしています。2番目の形式は「本による」カリー化ではありませんが、最初の形式と非常によく似ています(ただし、必要がないため、間違いなく使いやすいです)。_
)_
これらのフォームを使用するものから、一方のフォームをもう一方のフォームよりもいつ使用するかについてのコンセンサスは何ですか?
scala - アンダースコアを使用すると、部分関数アプリケーションがコードブロックを途中で実行する
与えられた:
私はそれを呼び出すことができます:
部分適用による興味深い動作は次のとおりです。
コードブロックは、関数として渡されることなく、すぐに評価されます。上記の2つのステートメントの違いは何ですか?
recursion - SML カリー化の質問
来週には中間試験があり、クラスで提供された sml ノートを調べていました。カリー化の例に出くわしましたが、それがどのように機能するか正確にはわかりませんでした。
数の累乗を計算する単純な関数です。関数定義は次のとおりです。
次の引数を渡すと、この関数がどのように機能するかわかりません。
これは私がそれを見る方法です:
得られるはずの結果は 4 ですが、上記で実行した手順からこの結果が得られる方法がわかりません。
助けてください。ありがとうございました。
programming-languages - 部分評価とカリー化
カリー化に関連するいくつかの例を理解し始めましたが、自分がなりたいと思っているカリー化の概念にはまだ慣れていません。カリー化を使用して部分的な評価を行うことができることは知っていますが、特定の場合にどのように機能するかはわかりません。
以下の例でそれがどのように機能するかを知っています:
したがって、 x の引数のみを渡すとしましょう。これは次と同等です。
結局戻ってくる
今、私はこのアイデアを組み込み関数に適用しようとしていますfoldl
。
そのコードは次のとおりです。
私の質問は、すべての引数を に渡さない場合foldl
(つまり、 function である最初の引数のみを渡す場合('a*'b->'b)
) です。最初に示した例では、引数の 1 つだけが渡されたときに関数がどのように機能するかを確認するのは非常に簡単でした。foldl
ただし、引数が 1 つしか渡されない場合にどのように機能するかを確認するのに苦労しています。
ヘルプ。
sml - SMLの関数のタイプ
以下に示す関数のタイプがなぜであるかを誰かが私に説明できます
('a * 'b -> 'b) -> 'b -> 'a list -> 'b
か?
関数は次のとおりです。
この関数を見ると、タプルを取り込んで戻って('a * 'b -> 'b) -> 'b
くる関数があり、基本ケースでは。を返すので、型は正しいはずです。f
'b
'b
lambda - カリー化は単なる「オプションのパラメーター」ですか?
「カリー化は、オプションのパラメーターを持つための単なる派手な方法です」という Web 上の男の声明を読みました。直観的には、このステートメントは浅くて間違っていると感じますが、ラムダ計算に関する十分な知識がないためか、実際には指を置くことができません。
違いを説明しようとすると、私の説明は段落にまたがりますが、ほとんどの場合、「カリー化は、型としてパラメーターの数が少ない関数の宣言のすべてのバリエーションを持つことです。しかし、オプションのパラメーターを持つ関数のすべての組み合わせを有効な型として持つことはできません。少なくとも自動的にではなく、他の宣言でそれらを使用してください。」
私のアプローチは最初は正しいですか?さらに重要なことに、それを説明するためのより簡単でわかりやすい方法はありますか?
function - Scala で関数を定義する 2 つの方法。違いはなんですか?
これは、いくつかの関数を定義して試す小さな Scala セッションです。
うまく動作します。
おっとっと。
うまくいきます!
_
これで、折りたたみ時の構文 (_ + _
など)を見てきました。私が理解しているように、それは_
基本的に「議論」を意味します。つまりtest1 _
、基本的には引数を持つ関数を意味し、これは " に与えられtest1
ます。しかし、それが単にとまったくtest1
同じではないのはなぜですか? を追加すると違いがあるのはなぜ_
ですか?
というわけで探索を続けた…
ここでは、なしで動作し_
ます! def
ed 関数と ed 関数の違いは何val
ですか?
function - 関数をカリー化して別の関数を取得する:unit->'a
次のような高階関数があるとします。
そして別の機能:
ラムダを使用せずincr
に、に渡す方法はありますか?call
(fun () -> incr 1)
明らかに、関数が「完全に適用」されるため、受け渡し(incr 1)
は機能しません。
編集
明確にするために:私はそれが関数になるように関数をカレーする方法があるかどうか疑問に思っています:unit -> 'a
。
scala - カリー化のデフォルト パラメータ
関数を次のように定義できます。
私はそれを呼び出すことができます:
上記をカリー化すると:
1つのパラメーターで呼び出すことはできません:
両方のパラメーターを指定する必要があります。これを回避する方法はありますか?
python - Pythonでは、部分機能アプリケーション(カリー化)と明示的な関数定義
Pythonでは、次のことを行うのがより良いスタイルと見なされますか?
- より一般的な、場合によっては内部使用の関数の観点から、有用な関数を明示的に定義します。また、
- 部分機能アプリケーションを使用して、関数カリー化を明示的に記述しますか?
不自然な例として私の質問を説明します。
スコアリング関数とアイテムのリストの2つの引数を取る関数_sort_by_scoringを作成するとします。元のリスト内の各アイテムの位置に基づいてスコアでソートされた元のリストのコピーを返します。2つのスコアリング関数の例も提供されています。
関数_sort_by_scoreが直接呼び出されることはありません。代わりに、スコアリング関数とその唯一の引数(アイテムのリスト)を_sort_by_scoringに渡し、結果を返す他の単一引数関数によって呼び出されます。
明らかに、この意図は機能カリー化の観点からよりよく表現されています。
使用法(いずれの場合も):
明示的な関数定義スタイルの明らかな利点:
- NameErrorsを発生させることなく、より一般的な関数の前に有用な関数を定義できます。
- ヘルパー関数(スコアリング関数など)は、関数定義本体内で定義できます。
- おそらくデバッグが簡単です。
- 「暗黙的よりも明示的の方が優れている」という理由で、コードは見栄えがします。
カリー化された関数定義スタイルの明らかな利点:
- 関数型プログラミングの意図を慣用的に表現します。
- 簡潔さのおかげで、コードは見栄えがします。
「便利な」機能を定義するために、2つのスタイルのどちらが好ましいですか?より慣用的な/Pythonicなどの他のスタイルはありますか?