問題タブ [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.
haskell - 長さを計算する Haskell 高階関数
ここで何が起こっているのか理解できませんか?誰でもこのコードを説明できますか? この関数はどのように長さを計算しますか?
ラムダ、アンダースコア、アンダースコアと n の間のスペース、および右側のゼロを使用するのはなぜですか?
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
特定のリテラルの暗黙を作ることができるという考えです。
higher-order-functions - 引数の位置展開バージョンを返す関数の名前はありますか?
splatter
この Python コードを検討してください。
n個の圧縮されたシーケンスにn項関数をマッピングすることは、すでに名前が付けられている可能性があるほど一般的な操作のようですが、どこでそれを見つけることができるかわかりません。それは漠然とカリー化を連想させ、私が聞いたことのない他の関連する引数中心の HOF があるようです。これが「よく知られている」関数であるかどうかは誰にもわかりますか? それについて議論するとき、私は現在、質問のタイトルで使用されているタイプの厄介な言語にこだわっています.
編集
うわー、Pythonmap
はこれを自動的に行います。あなたは書ける:
そして、それは正しいことを行い、splatter
あなたの関数を ing する手間を省きます。唯一の違いはzip
、長さが最短の引数の長さであるリストを返すのに対し、map
は短いリストを で拡張することNone
です。
java - Scala の高階関数から提供された例への段階的な接続
Scala の高階関数定義から提供された例にジャンプする方法を理解するのに苦労しています。これは、スライド 81のこのスライド ショーで提供されました。
高階関数の定義は次のとおりです。
提供されている例は次のとおりです。
は?!ここにはいくつかの手順が必要です。例では、関数定義といくつかの Scala の優れた点の両方を活用している可能性があることがわかりました。私は、Scala を読んだり、関連する仮定を作成したりするのに十分な経験がありません。
私のバックグラウンドは Java OO です。現在、Scala と関数型プログラミングを学んでいます。そして、これは私が理解していないこのような最初の例ではありません. 無知に見えることを知って投稿する勇気があったと感じたのはこれが初めてです。
これについて調べてみました。最初に、Scala の「バイブル」、「Programming in Scala 2nd Edition」に行き、そこから if を理解しようとしました (165 ~ 9 ページ)。次に、StackOverflow で検索を行いました。そして、その地域について話しているいくつかのリンクを見つけました。しかし、このスライドの特定のインスタンスに対応する方法で、Scala の高階関数定義と提供された例との関係を段階的に示しているものは実際には何もありません。
StackOverflowで見つけたものは次のとおりです。
Google をスキップして、StackOverflow に直接アクセスしたことに気付きました。うーん。グーグルで適切なリンクを見つけたら、ぜひご覧ください。サルモナド、ブラストモーフィズムなどの用語を使用するすべての Google リンクをふるいにかける時間はありませんでしたが、さらに混乱し、これを理解しようとする可能性が低くなりました。
python - Boost::Python を使用した高次プログラミング
そのため、C++ で記述され、Boost ライブラリを使用する単純なイベント ライブラリがあります。上記のライブラリを Python に公開したかったので、当然 Boost::Python に目を向けました。最終的にはコンパイルするコードを手に入れましたが、今ではかなりの問題に直面しています。私のライブラリは高次のプログラミング手法を使用しています。たとえば、ライブラリは、イベント クラス、イベント マネージャ クラス、およびイベント リスナ クラスの 3 つのメイン クラスで構成されています。イベント リスナ クラスが問題を引き起こします。コード:
ご覧のとおり、関数setResponse
が問題です。関数を渡す必要がありますが、残念ながら、Boost::Python はこの状況ではコンバーターの魔法を適用しません。次のように呼び出された場合:
次のエラーが発生します。
それで、私の質問は、どうすればこれを修正できますか? ライブラリを C++ から呼び出し可能なままにしたいので、オーバーロードまたはラッパーを使用する必要があります。
struct - GLSLの二次関数?
関数を GLSL の別の関数の引数として使用する方法を探しています。通常の C では、関数ポインターを関数の引数として渡すことでシミュレートできます。また、他の言語 (HLSL など) では、高階関数などの高レベルの構造を処理する方法を提供したり、HLSL 構造を巧みに使用してそれらをシミュレートしたりできるようになりました。残念ながら、今のところ GLSL で立ち往生しており、高階関数をシミュレートする方法が見つかりません。現在の (4.2) GLSL では本当に不可能ですか? または、巧妙なトリックがありませんか?
私が達成しようとしているものの一般的な例:
f# - 操作を最も内側の構造にパイプする演算子のFP名はありますか?(fsharpの|>演算子に似ています)
私は2つの演算子を書かなければなりませんでした:
次の操作を行うために、最初のグループはSeqをMapに変換し、2番目のグループはコレクションにキーを追加します
これらの2つの演算子|/>と||>に特別な名前はありますか?
これは私が他のそのようなオペレーターを見つけるのを助け、車輪の再発明をしません
編集
グループ化を解除する場合にも役立ちます
function - 関数を返す Haskell 関数を作成するにはどうすればよいですか?
a
、b
、 の3 つの Haskell 関数を作成したいと思いますc
。
各関数には 1 つの引数があります。引数は、3 つの関数の 1 つです。
a
関数にこの動作をさせたい:
- 引数が function の場合、 function
a
を返しますa
。 - 引数が関数 b の場合は、 function を返します
b
。 - 引数が関数 c の場合、関数を返します
a
。
関数に必要な動作の要約を次に示しますa
。
そして、他の2つの機能に私が望む動作は次のとおりです。
作成したら、さまざまな方法で関数を構成できるようにしたいと思います。たとえば、次のようになります。
これらの関数を作成するにはどうすればよいですか?
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レベルの深さで、|*>
ネストされたシーケンスのデカルト積を列挙します)、これを行うためのより良い方法があるかどうか疑問に思っています、これで共有する美しいコードがある場合に備えて。
c# - 高階関数内でのnull合体演算子の使用
私はこれが可能かどうか頭を包み込もうとしています。私の勘は、確認したかったのではないということです。
次の高階関数は、null合体演算子を使用します。
目標は、次のようにプロパティ内で使用することです。
意図したとおりに機能した場合、GetSomeMember()関数は、プロパティが最初に呼び出されたときに1回だけ呼び出されます。その後、プロパティの保存されたインスタンスを返すことができます。(その基本的なメモ化/ null合体の概念)。
ここで注意が必要なのは、プライベートフィールドの使用を選択する代わりに、格納されたインスタンスをクロージャー内にトラップしようとすることです。'SomeMember'の状態をSomeMemberを含むクラス内に保存できることは知っていますが、好奇心のためにそれを明示的に回避しようとしています。目標は、get {}ブロック内にとどまるために必要なすべてのものです(これには、Coalesce()から返されたデリゲートを格納しないことも含まれます)。
プロパティにアクセスするたびに、返される内部関数と外部関数の両方が呼び出されるため、問題が発生します。'T local'変数は毎回再割り当てされるため、null合体演算子は常にGetSomeMember()を再呼び出しします。
考え?