問題タブ [partial-application]
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.
performance - 部分関数またはカリー化された関数のパフォーマンスは、Haskell で適切に定義されていますか?
次のコードでは:
部分関数 ismax は maxel を計算しますか? 具体的には、Haskell の部分関数の複雑さに関する規則を誰か指摘できますか? 上記の例で、コンパイラは maximum を 1 回だけ呼び出さなければなりませんか? 別の言い方をすれば、部分関数は、内部 where 句の以前の呼び出しの参照を保持しますか?
許容範囲内で実行されていない CPU バウンド コードがいくつかあり、複雑さについての推論で考えられるエラーを探しています。
haskell - Haskell での関数カリー化
私は機能を持っています:
OS の使用例:
2 つの質問があります。最初 - 機能しない理由:
[2、2]を取得したい。
そして2問目。pariatl 関数を作成しようとしています。このようなもの:
そのように使用するには:
しかし、私はエラーメッセージを受け取りました:
これは5月のコードでいっぱいです:
powerOf num の p の最大パワーを返します。例: 100 = 2 * 2 * 5 *5、したがって powerOf 100 2 = 2. 10 = 2 * 5、したがって powerOf 10 2 = 1.
エラーを修正するには?ありがとう。
javascript - JavaScript カレー関数
私はcurry
この方法で関数を実装しました:
上記の関数を使用して次のことを行うと
ログに記録しundefined
ます。期待される出力は 11 ではありませんか? コードの何が問題になっていますか?
注:関数 logsconsole.log(x, y)
内で使用します。戻る理由がわかりません。add
1 10
undefined
.net - (.NET 2.0 以降を使用して) デリゲート パラメーターをカリー化するのに最適なパターンは何ですか?
パラメーターを備えたメソッド呼び出しを取得し、その時点でパラメーターを指定しなくても、それらのパラメーターで指定された関数を呼び出す MethodInvoker に変換すると便利な場合があります。他の場合には、同様のことを行うと便利ですが、いくつかのパラメーターは開いたままにします。このタイプのアクションは「カリー化」と呼ばれます。VBでこれを行うための最良のパターンは何ですか?
VB 2010 でラムダ式を使用することは可能ですが、ラムダ式はエディット コンティニュと互換性がなく、ラムダ式が作成するクロージャーは参照による予期しない動作をする可能性があります。別のアプローチは、次に示すようないくつかの一般的なメソッドを定義することです。
Foo(5, "Hello") を実行する MethodInvoker を作成したい場合は、次を使用して作成できます。
MyAction(X) を Boz(X, "George", 9) (X は Double) に変換したい場合は、
さまざまな数の固定および非固定パラメーターに対応するために膨大な量の定型コードが必要であり、どのパラメーターが固定され、どのパラメーターが固定されていないかを明確にするデリゲート作成構文に固有のものがないことを除いて、すべて非常に巧妙です。修繕。パターンを改善する方法はありますか?
補遺:デリゲートが構造体メンバー関数から作成された場合のメカニズムは何ですか? デリゲートは構造体の独自のコピーを取得しているようですが、そのコピーがボックス化されているかボックス化されていないかはわかりません。ボックス化されていない場合、CurryAction0 と CurryAction1 を構造体に置き換えると、デリゲートの作成時に CurryAction0 または CurryAction1 を別のヒープ オブジェクトとして割り当てる必要がなくなります。ただし、ボックス化する場合、構造体を使用すると、何も保存せずに構造体をボックス化されたインスタンスにコピーするというオーバーヘッドが追加されます。
scala - Scalaで部分的に適用された関数を使用することのアプリケーション/利点は何ですか?
Scalaで関数を部分的に適用しました-
部分的に適用された機能を使用することの利点は何であるか疑問に思いました。それとも単に構文上の追加ですか?
scala - Scala が複数のパラメーター リストとリストごとの複数のパラメーターの両方を提供するのはなぜですか?
複数のパラメーター リスト (例: リストdef foo(a:Int)(b:Int) = {}
ごとの複数のパラメーター) はdef foo(a:Int, b:Int) = {}
、私が知る限り、意味的に同等であり、ほとんどの関数型言語には、複数のパラメーター (F# など) を宣言する方法が 1 つしかありません。
これら両方のスタイルの関数定義をサポートする唯一の理由は、パラメーターを 1 つしか持たないパラメーター リストを使用して、構文に似た言語拡張を許可するためです。
構文のように呼び出すことができるようになりました
ただし、複数のパラメーター リストを使用せずに中括弧の使用をサポートする方法は他にもあります。
関連する質問: Scala で複数のパラメーター リストを使用することを「カリー化」と呼ぶのはなぜですか? カリー化は通常、部分適用をサポートするために n 項関数を単項にする手法として定義されます。ただし、Scala では、関数の「カリー化された」(それぞれ 1 つのパラメーターを持つ複数のパラメーター リスト) バージョンを作成せずに、関数を部分的に適用できます。
python - Pythonでは、部分機能アプリケーション(カリー化)と明示的な関数定義
Pythonでは、次のことを行うのがより良いスタイルと見なされますか?
- より一般的な、場合によっては内部使用の関数の観点から、有用な関数を明示的に定義します。また、
- 部分機能アプリケーションを使用して、関数カリー化を明示的に記述しますか?
不自然な例として私の質問を説明します。
スコアリング関数とアイテムのリストの2つの引数を取る関数_sort_by_scoringを作成するとします。元のリスト内の各アイテムの位置に基づいてスコアでソートされた元のリストのコピーを返します。2つのスコアリング関数の例も提供されています。
関数_sort_by_scoreが直接呼び出されることはありません。代わりに、スコアリング関数とその唯一の引数(アイテムのリスト)を_sort_by_scoringに渡し、結果を返す他の単一引数関数によって呼び出されます。
明らかに、この意図は機能カリー化の観点からよりよく表現されています。
使用法(いずれの場合も):
明示的な関数定義スタイルの明らかな利点:
- NameErrorsを発生させることなく、より一般的な関数の前に有用な関数を定義できます。
- ヘルパー関数(スコアリング関数など)は、関数定義本体内で定義できます。
- おそらくデバッグが簡単です。
- 「暗黙的よりも明示的の方が優れている」という理由で、コードは見栄えがします。
カリー化された関数定義スタイルの明らかな利点:
- 関数型プログラミングの意図を慣用的に表現します。
- 簡潔さのおかげで、コードは見栄えがします。
「便利な」機能を定義するために、2つのスタイルのどちらが好ましいですか?より慣用的な/Pythonicなどの他のスタイルはありますか?
scala - Scalaで部分的に適用された関数から引数を取り戻す
すでに部分的に適用されている関数から引数を取り戻す方法はscalaにありますか?
これは意味がありますか、実行する必要がありますか、または任意のユースケースに適合しますか?
例:
def doStuff(lower:Int,upper:Int,b:String)=
for(turn <- lower to upper) println(turn +": "+b)
ある時点で「lower」引数を知っていて、それを「doStuff」に適用する関数を取得したと想像してください。
val lowerDoStuff = doStuff(3,_:Int,_:String)
その3を取り戻す方法はありますか?(例として、「lowerDoStuff」のみを受け取った関数の中にいて、最初の引数を知る必要があると想像してください)
慣用的なscalaは、内省/反省よりも好まれます(可能な場合)。
scala - 部分的に適用された関数の名前を取得することはできますか?
関数を定義したとします。
次に、部分関数を定義しました。
p を印刷すると、次のように表示されます。
関数名は表示されません。hello
部分関数から元のメソッド名を取得することはできますp
か?
haskell - 部分的なアプリケーションは実行時にどのように表現されますか?
map (1+) list
Haskell のようなものを書くとき、 の内部表現は(1+)
何ですか? の部分適用なので(+)
、引数1
をどこかに保存しなければならないのですが、これが頭に浮かびません。カリー化と部分適用の実装方法を簡単に説明してもらえますか?