問題タブ [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.
haskell - Haskell: 部分適用関数、raytracer プログラムでの関数合成
関数の構成と部分的に適用される関数の概念を理解するのに問題があります。
実際、私は小さなレイトレーサーを書いていて、正確に理解できないいくつかの実装例があります。これは私が理解していない1つの例です(https://github.com/ryanl/haskell-raytracer/blob/master/src/RayTracer.hs):それは光線の色を検出する関数です:
lightadded
-partが部分的に適用された関数を表す(サブ)関数に興味がありますfoldr
(私が正しい場合)。関数の概念は明確で、表面上の点に可視光源の光を追加したいと考えています。effectivelight
すべての可視光源に対して、マップされた関数があります。私が理解していないのは、関数の最後のパラメーターfoldr
( . map effectivelight ) と関数の完全な構造です。誰かが私に関数 (部分的に) と関数の構造を説明できますか? 関数をより直感的な方法で記述できるのではないでしょうか?
javascript - Crockford の「curry」メソッドで「this」が無効化される理由はありますか?
Douglas Crockford の著書 "Javascript: The Good Parts" で、彼はcurry
関数と引数を受け取り、その関数に既に追加された引数を返すメソッドのコードを提供しています (明らかに、これは実際には「カレー」が意味するものではなく、「部分適用」)。これは、彼が作成した他のカスタム コードがなくても機能するように変更したコードです。
したがって、add
関数がある場合:
すでに引数が 1 つある新しい関数を作成できます。
それはうまくいきます。しかし、私が知りたいのは、なぜ彼が に設定this
したのnull
かということです。予想される動作は、カリー化されたメソッドが元のメソッドと同じであるということではないでしょうthis
か?
私のバージョンのカレーは次のようになります。
例
Douglas Crockford のやり方でやろうとすると、次のようになります。
私が自分のやり方でそれを行う場合:
しかし、ダグラス・クロックフォードが自分のやり方でやったのなら、おそらく正当な理由があると思います。私は何が欠けていますか?
javascript - 引数の配列で Function.prototype.bind を使用しますか?
ハードコードされた引数ではなく、引数の配列を使用して Function.prototype.bind を呼び出すにはどうすればよいですか? (ECMA6 を使用していないため、スプレッド オペレーターはありません)。
コールバックを使用するモジュールの周りに promises ラッパーを配置しようとしています。ラッパー メソッドに渡されたすべての引数をバインドし、それらをバインドしたいと考えています。次に、プロミスを解決または拒否する独自のコールバックを使用して、部分的に適用されたバインドされた関数を呼び出したいと考えています。
しかし、 bind は引数の配列ではなく引数を期待しているため、明らかにこれは機能しません。引数配列の末尾にコールバックを挿入し、apply を使用することで、これを実行できることがわかっています。
または、引数配列を反復処理し、各引数の関数を再バインドします。
しかし、これらの方法はどちらも汚いと感じます。何か案は?
partial-application - Livescriptで巻き上げられたカレー関数を定義することは可能ですか?
function
Livescriptのキーワードでカリー化された関数をどのように定義しますか?
より簡潔に、どうすればこれを取得できますか
このように振る舞うこと
clojure - Clojureのリーダーモナドと部分関数の違いは何ですか?
Leonardo Borges は、Clojure のモナドに関する素晴らしいプレゼンテーションをまとめました。その中で彼は、次のコードを使用してClojure のリーダー モナドについて説明しています。
これの利点は、純粋に機能的な方法で環境から値を読み取ることです。
しかし、このアプローチは Clojure の部分関数に非常によく似ています。次のコードを検討してください。
私の質問は次のとおりです。リーダー モナドと Clojure の部分関数の違いは何ですか?
c++ - C/C++: A (*eval(A (*function)(B),B b))(){ ... } 可能?? (おそらく C++11 より前)
C / C ++(おそらくC ++ 11より前)で、それは可能ですか
つまり、関数を取る
- B値からA値を返す関数、
- その関数に供給される B 値、
which returns - () から A を返す関数 ...??
はいの場合、そうでしょうか
- 効率的??
- 返された関数の呼び出しの前に実行されないコードをコンパイラが生成することを保証しますか??
前もって感謝します & 乾杯, ニック
2014-4-20 (1): 'evtl.'(修正済み) std::bind について言及していただきありがとうございます。:-)
したがって、理解するために、(Boost を使用しない C/pre C++11 では) 関数ポインターは例外的であり、functions 内ではそれらを宣言することしかできませんが、インスタンスを生成または変更する方法はありません。関数/メソッド定義は、関数ポインター インスタンスの唯一の可能なソースであり、そこから明示的に、または関数/メソッド引数によって渡される可能性があります??
関数ポインターの内部表現の可能性について明確ではないので、ただ尋ねます...
2014-4-20 (2): Danvil の貢献により、目的を明らかにする時が来ました。ここではテンプレートと同じです:
これは機能しますが、一部の人はすでに推測しているように、任意の一致する関数/引数のコレクションからの全体が、try/catch に似た実行を処理する単一の関数/メソッドにゼロ パラメーター プロシージャとして送信されることを意図しています。
異なるパラメーター数ごとにほとんど同じコードを使用する必要がないため、実際のアイデアは、すべてのケースで同じタイプのゼロパラメータープロシージャーとしてまだ実行されていないジョブを生成することでした。
それでも、関数内で関数ポインターを作成または変更する方法がわかりません。何らかの方法で評価者に「タイプキャスティング」することは実際的ではないようですよね??
繰り返しになりますが、どうもありがとうございました。ハッピーイースター... :-)
haskell - Haskell は、部分適用で定義されたこの関数をどのように評価しますか?
Haskellpp1 [1,2,3,4]
が[(1,2),(2,3),(3,4)]
ここに到達するためにどのように評価するかを理解しようとしています:
私はこのように始めます:
何か助けはありますか?