問題タブ [higher-order-functions]

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.

0 投票する
4 に答える
620 参照

c++ - C++0x における高階関数とラムダの問題

各コンポーネントで計算を行った後、多くの STL ベクトルを画面に出力する必要があるプログラムがあります。だから私はこのような関数を作成しようとしました:

そして、次のように使用します。

printWith残念ながら、呼び出しの中に入れたラムダ式の型に関するコンパイル エラーが発生しました。

もちろん、私がそうするなら:

その後printWith(foo, sumOne);、意図したとおりに動作します。ラムダ式の型は、推論された戻り値の型を持つ関数の型になると思いました。また、通常の関数に適合できる場所ならどこにでもラムダを適合できると考えました。どうすればこれを機能させることができますか?

0 投票する
1 に答える
275 参照

haskell - Haskell高階関数の問題

現在のコード

私は2つの機能を持っています

この関数を[Int]別の関数でに適用する

エラー

結論

実際に私が必要としたのは、を使用するために実行するものを適用することですf1。 この問題は高階関数で解決できますか?または他の方法?...または、どのようにして高階関数に変換できますか?Int[Int]f2f2f1

ありがとう!

0 投票する
1 に答える
191 参照

haskell - マップ付き Haskell 高階関数

現在char値を返す高階関数であるテスト、私はStringas を返す必要がありましたtest::Int->(Int-> Char)->String

関数本体に変更しました

エラー

この関数を map を使用して文字列に適用するにはどうすればよいですか? どこで間違ったのですか?

0 投票する
1 に答える
26690 参照

matlab - ezplotを使用して、MATLABの同じグラフに2つの関数をプロットします。

ezplot()を使用してMATLABで次の3つの関数をプロットしたいのですが、違いを簡単に解釈できるように、関数を同じグラフ上に配置したいと思います。これは可能ですか?もしそうなら、どのように?3つの機能は次のとおりです。

ありがとう、
mysticxhobo

0 投票する
2 に答える
527 参照

perl - Perlでは、coderefのパッケージを決定するための最も信頼できる方法は何ですか?

コード参照を取り込んでそのコードを一部のデータに適用する高階ユーティリティ関数がいくつかあります。これらの関数の一部は、サブルーチンの実行中に変数をローカライズする必要があります。最初は、この関数callerの例に示されているのと同様の方法で、ローカライズするパッケージを決定するために使用していました。reduce

最初はこの手法は問題なく機能しましたが、高階関数の周りにラッパー関数を記述しようとすると、正しい呼び出し元を見つけるのが複雑になります。

今、動作するためreduceに、私は次のようなものが必要になります:

この時点で、どのパッケージをスキップするかが問題になり、それらのパッケージ内から関数を使用しないという規律が組み合わされました。より良い方法がなければなりませんでした。

高階関数が引数として取るサブルーチンには、問題を解決するのに十分なメタデータが含まれていることがわかります。私の現在の解決策は、Bイントロスペクションモジュールを使用して、渡されたサブルーチンのコンパイルスタッシュを決定することです。そうすれば、コードのコンパイルとその実行の間に何が起こっても、高階関数は常にローカライズする正しいパッケージを知っています。

だから私の究極の質問は、これがこの状況で発信者のパッケージを決定する最良の方法であるかどうかです。私が考えていなかった他の方法はありますか?現在のソリューションで発生するのを待っているバグはありますか?

0 投票する
6 に答える
5781 参照

c# - インターンされた文字列をロックしていますか?

更新:このメソッドがスレッド セーフでない場合は許容されますが、スレッド セーフにする方法を知りたいと思っています。keyまた、回避できる場合は、すべての値に対して単一のオブジェクトをロックしたくありません。

元の質問:キーと関数を受け取り、指定されたキーでオブジェクトがキャッシュされているかどうかをチェックする高階関数を書きたいとします。が含まれている場合、キャッシュされた値が返されます。それ以外の場合は、指定された関数が実行され、結果がキャッシュされて返されます。

これが私のコードの簡略版です:

keyまた、コンパイル時に可能なすべての値を知っているわけではないとします。

このスレッドを安全にするにはどうすればよいですか? 1 つ以上のスレッドが私の条件を true と評価するのを防ぐために、ここでロックを導入する必要があることはわかっていますが、何をロックすればよいかわかりません。ロックについて読んだ例の多く ( Jon Skeet の記事など) では、ロック専用の「ダミー」プライベート変数を使用することを推奨しています。この場合、コンパイル時にキーが不明であるため、これは不可能です。すべての に同じロックを使用することで、このスレッドを簡単に安全にできることはわかっていますkeyが、それは無駄になる可能性があります。

さて、私の主な質問は次のとおりです。

ロックオンは可能keyですか?ここで文字列インターンが役立ちますか?

.NET 2.0 string interning inside outを読んだ後、明示的に呼び出しString.Intern()て、文字列の値から文字列のインスタンスへの 1 対 1 のマッピングを取得 できることを理解しました。これはロックオンに適していますか?上記のコードを次のように変更しましょう。

上記の実装はスレッドセーフですか?

0 投票する
2 に答える
2202 参照

api - Scalaでfoldが次のタイプになるのはなぜですか?

foldが不変に対して定義される方法を見ていました。Set:

ただし、foldLeftは次のように定義されます。

foldLeftと同じように、foldが返すコレクションのタイプを変更できることを期待していたので、これは少なくとも一見すると奇妙に見えます。

これは、foldLeftとfoldRightが、要素が折りたたまれる順序について何かを保証しているためだと思います。foldによって与えられる保証は何ですか?

0 投票する
1 に答える
878 参照

haskell - 高階関数内のポリモーフィズム?

同等の値を保持するコンストラクターと保持しないコンストラクターを持つ代数的データ型があります。(==)標準や(/=)演算子のように機能するいくつかの比較関数をNothing作成しましたが、意味をなさない比較に戻ります。

それは機能しますが、繰り返しは扱いにくいです。特に、実際にはVariantコンストラクターと比較関数が多いためです。

比較関数でパラメーター化されたヘルパー関数に繰り返しを因数分解できると思いました。

しかし、型変数は明らかに両方にaバインドできず、同時に;の定義にバインドできないため、これは機能しません。GHCはそれをにバインドし、を処理する行の型の不一致について文句を言います。IntFloathelperFloatIntValue

のような関数(==)は、直接使用すると多形になります。それを別の関数に渡して多形のままにする方法はありますか?

0 投票する
3 に答える
308 参照

perl - カスタム関数で Perl のマップを使用する

私は(多くの無関係な行をスキップする)Perlスクリプトを持っています

エラーなしで実行されます。しかし、配列内の値にアクセスしようとすると、エラーが発生します。

マッピングを削除すると、コードは正しく機能します。つまり、変数は null または空の文字列ではありません。私は何を間違っていますか?これを行うための良い慣用的な方法はありますか? (順番に行うのは明らかに簡単です。)

0 投票する
1 に答える
302 参照

haskell - コンビネータを使用して有用なライブラリを設計する方法がわからない

私はコンビネータについて読んでいて、それらがどれほど有用であるかを見てきました(たとえば、HaskellのParsecで)。私の問題は、それらを実際にどのように使用するかがよくわからないことです。

問題の概要は次のとおりです。ディストリビューションは、生成、フィルタリング、および変更できます。ディストリビューションを組み合わせて、新しいディストリビューションを作成できます。

基本的なインターフェースは(疑似Haskellタイプの用語で):

今、私は3つのコンビネータを見ていると思います。

これらは実際にコンビネータですか?コンビネータは理にかなっていますか/私が見逃している他の明らかなコンビネータはありますか?

アドバイスありがとうございます。