問題タブ [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 投票する
1 に答える
893 参照

haskell - 長さを計算する Haskell 高階関数

ここで何が起こっているのか理解できませんか?誰でもこのコードを説明できますか? この関数はどのように長さを計算しますか?

ラムダ、アンダースコア、アンダースコアと n の間のスペース、および右側のゼロを使用するのはなぜですか?

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

haskell - Haskellの行多相:「変換」を使用したForthDSLの記述の問題

私は最近のHaskellブログアクティビティ1に触発されて、HaskellでForthのようなDSLを書いてみました。私が採用したアプローチは、同時に単純で紛らわしいものです。

簡単なことをするために、これは非常にうまく機能します:

単純な関数は、対応するスタック変換に簡単に変換できます。これまでのところ、遊んでみると楽しい結果が得られます。

これを高階関数で拡張しようとすると問題が発生します。

callは、フォームの「残り」に変換(スタックの先端に保持されている)を本質的に「適用」することにより、(s :> (s :~> s'))フォームのスタックをフォームに変換することになっています。s私はそれがこのように機能するはずだと思います:

しかし実際には、それは私に巨大な型の不一致エラーを与えます。私は何が間違っているのですか?「スタック変換」表現は高階関数を十分に処理できますか、それとも調整する必要がありますか?

1 N.B. これらの人がそれをした方法とは異なりstart push 1 push 2 add end、私はそれをしたいのですrunF $ start (push 1) (push 2) addが、おそらく後で私はいくつかの型クラスの魔法を使ってpush特定のリテラルの暗黙を作ることができるという考えです。

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

higher-order-functions - 引数の位置展開バージョンを返す関数の名前はありますか?

splatterこの Python コードを検討してください。

n個の圧縮されたシーケンスにn項関数をマッピングすることは、すでに名前が付けられている可能性があるほど一般的な操作のようですが、どこでそれを見つけることができるかわかりません。それは漠然とカリー化を連想させ、私が聞いたことのない他の関連する引数中心の HOF があるようです。これが「よく知られている」関数であるかどうかは誰にもわかりますか? それについて議論するとき、私は現在、質問のタイトルで使用されているタイプの厄介な言語にこだわっています.

編集

うわー、Pythonmapはこれを自動的に行います。あなたは書ける:

そして、それは正しいことを行い、splatterあなたの関数を ing する手間を省きます。唯一の違いはzip、長さが最短の引数の長さであるリストを返すのに対し、mapは短いリストを で拡張することNoneです。

0 投票する
7 に答える
2661 参照

java - Scala の高階関数から提供された例への段階的な接続

Scala の高階関数定義から提供された例にジャンプする方法を理解するのに苦労しています。これは、スライド 81のこのスライド ショーで提供されました。

高階関数の定義は次のとおりです。

提供されている例は次のとおりです。

は?!ここにはいくつかの手順が必要です。例では、関数定義といくつかの Scala の優れた点の両方を活用している可能性があることがわかりました。私は、Scala を読んだり、関連する仮定を作成したりするのに十分な経験がありません。

私のバックグラウンドは Java OO です。現在、Scala と関数型プログラミングを学んでいます。そして、これは私が理解していないこのような最初の例ではありません. 無知に見えることを知って投稿する勇気があったと感じたのはこれが初めてです。

これについて調べてみました。最初に、Scala の「バイブル」、「Programming in Scala 2nd Edition」に行き、そこから if を理解しようとしました (165 ~ 9 ページ)。次に、StackOverflow で検索を行いました。そして、その地域について話しているいくつかのリンクを見つけました。しかし、このスライドの特定のインスタンスに対応する方法で、Scala の高階関数定義と提供された例との関係を段階的に示しているものは実際には何もありません。

StackOverflowで見つけたものは次のとおりです。

  1. Scala: ワークショップのアドバイス
  2. 一般的な Scala 関数の詳細
  3. Scala:「ジェネリック」関数パラメータを定義する方法は?

Google をスキップして、StackOverflow に直接アクセスしたことに気付きました。うーん。グーグルで適切なリンクを見つけたら、ぜひご覧ください。サルモナド、ブラストモーフィズムなどの用語を使用するすべての Google リンクをふるいにかける時間はありませんでしたが、さらに混乱し、これを理解しようとする可能性が低くなりました。

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

python - Boost::Python を使用した高次プログラミング

そのため、C++ で記述され、Boost ライブラリを使用する単純なイベント ライブラリがあります。上記のライブラリを Python に公開したかったので、当然 Boost::Python に目を向けました。最終的にはコンパイルするコードを手に入れましたが、今ではかなりの問題に直面しています。私のライブラリは高次のプログラミング手法を使用しています。たとえば、ライブラリは、イベント クラス、イベント マネージャ クラス、およびイベント リスナ クラスの 3 つのメイン クラスで構成されています。イベント リスナ クラスが問題を引き起こします。コード:

ご覧のとおり、関数setResponseが問題です。関数を渡す必要がありますが、残念ながら、Boost::Python はこの状況ではコンバーターの魔法を適用しません。次のように呼び出された場合:

次のエラーが発生します。

それで、私の質問は、どうすればこれを修正できますか? ライブラリを C++ から呼び出し可能なままにしたいので、オーバーロードまたはラッパーを使用する必要があります。

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

struct - GLSLの二次関数?

関数を GLSL の別の関数の引数として使用する方法を探しています。通常の C では、関数ポインターを関数の引数として渡すことでシミュレートできます。また、他の言語 (HLSL など) では、高階関数などの高レベルの構造を処理する方法を提供したり、HLSL 構造を巧みに使用してそれらをシミュレートしたりできるようになりました。残念ながら、今のところ GLSL で立ち往生しており、高階関数をシミュレートする方法が見つかりません。現在の (4.2) GLSL では本当に不可能ですか? または、巧妙なトリックがありませんか?

私が達成しようとしているものの一般的な例:

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

f# - 操作を最も内側の構造にパイプする演算子のFP名はありますか?(fsharpの|>演算子に似ています)

私は2つの演算子を書かなければなりませんでした:

次の操作を行うために、最初のグループはSeqをMapに変換し、2番目のグループはコレクションにキーを追加します

これらの2つの演算子|/>と||>に特別な名前はありますか?

これは私が他のそのようなオペレーターを見つけるのを助け、車輪の再発明をしません

編集

グループ化を解除する場合にも役立ちます

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

function - 関数を返す Haskell 関数を作成するにはどうすればよいですか?

ab、 の3 つの Haskell 関数を作成したいと思いますc

各関数には 1 つの引数があります。引数は、3 つの関数の 1 つです。

a関数にこの動作をさせたい:

  • 引数が function の場合、 functionaを返しますa
  • 引数が関数 b の場合は、 function を返しますb
  • 引数が関数 c の場合、関数を返しますa

関数に必要な動作の要約を次に示しますa

そして、他の2つの機能に私が望む動作は次のとおりです。

作成したら、さまざまな方法で関数を構成できるようにしたいと思います。たとえば、次のようになります。

これらの関数を作成するにはどうすればよいですか?

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

dictionary - f# でネストされた辞書を反転する Map<'a,Map<'b,'T>>) -> Map<'b,Map<'a,'T>>

ネストされたディクショナリMap<'a,Map<'b,'T>>があるため、 の組み合わせのa*bエントリは一意です。

効率的に事前計算するには、キーを反転する必要がありますMap<'b,Map<'a,'T>>

私は仕事をするいくつかの高次の方法を持っています(同じように|/>ネストされたシーケンスで操作を適用します|//>が、2レベルの深さで、|*>ネストされたシーケンスのデカルト積を列挙します)、これを行うためのより良い方法があるかどうか疑問に思っています、これで共有する美しいコードがある場合に備えて。

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

c# - 高階関数内でのnu​​ll合体演算子の使用

私はこれが可能かどうか頭を包み込もうとしています。私の勘は、確認したかったのではないということです。

次の高階関数は、null合体演算子を使用します。

目標は、次のようにプロパティ内で使用することです。

意図したとおりに機能した場合、GetSomeMember()関数は、プロパティが最初に呼び出されたときに1回だけ呼び出されます。その後、プロパティの保存されたインスタンスを返すことができます。(その基本的なメモ化/ null合体の概念)。

ここで注意が必要なのは、プライベートフィールドの使用を選択する代わりに、格納されたインスタンスをクロージャー内にトラップしようとすることです。'SomeMember'の状態をSomeMemberを含むクラス内に保存できることは知っていますが、好奇心のためにそれを明示的に回避しようとしています。目標は、get {}ブロック内にとどまるために必要なすべてのものです(これには、Coalesce()から返されたデリゲートを格納しないことも含まれます)。

プロパティにアクセスするたびに、返される内部関数と外部関数の両方が呼び出されるため、問題が発生します。'T local'変数は毎回再割り当てされるため、null合体演算子は常にGetSomeMember()を再呼び出しします。

考え?