問題タブ [functor]

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 投票する
2 に答える
5508 参照

java - .NET アクションに相当する Javaと関数など

System.Action<T>JavaやSystem.Func<T,U>.NET などに、標準的な汎用の「コールバック」または「関数/メソッド」型はありますか?

私の具体的なケースでは、型の 1 つの (ジェネリック) パラメーターを取り、T何も返さない (つまりvoid) メソッドをラップするクラスが必要です。

はい、自分でそのようなクラス/インターフェイスを作成するのは簡単ですが、標準ライブラリ クラスがある場合はそれを使用したいと思います。

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

haskell - すべての Haskell ファンクターはエンドファンクターですか?

私は少し混乱しており、誰かが私を正す必要があります. 私の現在の理解を概説しましょう:

Eエンドファンクタはどこにあり、Aいくつかのカテゴリは次のとおりです。

Haskell のすべてのタイプとモーフィズムがHaskカテゴリに含まれているため、Haskell のファンクタはエンドファンクタでもありませんか? .F : Hask -> Hask

私は自分が間違っていると感じていて、これをどうにかして単純化しすぎているので、誰かに私がなんてバカなのか教えてもらいたいのです。ありがとう。

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

module - OCaml のファンクターを理解する

私は OCaml の次のファンクターの問題にかなり悩まされています。理解できるように、コードの一部を貼り付けます。基本的

でこれら 2 つのモジュールを定義しましたpctl.ml

および次のファンクタ:

次に、これらのモジュールを実際に使用するために、次の名前のファイルに新しいモジュールを直接定義しましたprism.ml

3 番目のソース ( ) から、モジュールformulas.mlでファンクターを使用しました。Prism

そして最後からmain.ml

そしてコンパイルすると、次のエラーが発生します

エラー: この式にはタイプ Prism.state = Prism.value 配列がありますが、タイプ Formulas.PrismPctl.s の式が予期されていました

私が理解できることから、名前の一種の悪いエイリアシングがあり、それらは同じvalue arrayです(型がとして定義され、ファンクターでt使用さM with type s = P.tれているため)が、型チェッカーはそれらを同じとは見なしません。

どこに問題があるのか​​ 本当にわかりません。誰か助けてもらえますか?

前もって感謝します

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

c++ - C ++テンプレートファンクター(最新のC ++デザインに基づく)コンパイルエラー

「ModernC++Design」という本の第5章(一般化されたファンクター)に基づいています。

ファンクターテンプレートを作成しようとしています。「ブーストのバインドやロキを真っ直ぐに使ってみませんか?」と尋ねる前に。簡単な答えは「学びたいから」です。

そうは言っても、私はこの本を読み、サンプルコードも参照として使用しましたが、コンパイル時のエラーが発生し続けており、その理由が理解できないようです。

スレッドモデルを使用しないように本のサンプルコードを変更すると、サンプルは正常に機能します。しかし、私のコードはそうではありません。関連するコードは次のとおりです。

非常に基本的なTypeListと、TypeAtおよびNulltype、EmptyType(これも本に基づいています)

もちろん、これらを使用するのはファンクターです

私がこのようにこれを使おうとすると:

次のコンパイル時エラーが発生します。

私がこの問題を抱えている理由を誰かが理解していますか?私は考えが足りません。ありがとう

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

interface - OCamlのインターフェースとしてファンクターを使用する

私はOCamlでいくつかのアルゴリズムを開発しており、計算の一部が特定の計算機に委ねられるように、いくつかの部分を「プラグイン可能」にする必要があります。

例を示すために、次のような署名があるとします。

Alg1そして、とになる2つの異なる実装Alg2。このAlgorithmモジュールは、これら2つの実装のようなさまざまな実装のインターフェースを表す必要があります。

今度は別のコンポーネントが必要です。それを、それらのインターフェースを使用する、またはインターフェースを介してExecutor使用するモジュールと呼びましょう。Alg1Alg2

ファンクターについて読むと、必要なアルゴリズムの特定の実装でを取得しAlgorithmて生成するファンクターが必要なようです。ConcreteExecutorつまり、これExecutorは、そのコンポーネントの1つでパラメーター化された一種のモジュールです。

私は正しいですか?必要なものを手に入れる最良の方法ですか?私はJava/C ++のバックグラウンドを持っているので、このような考えを疑問に思っています。そのため、インターフェイスと抽象クラスを使用することに慣れており、このファンクター/モジュールの抽象化の問題に正しい方法で取り組む必要があります。

私が欲しいものを取得するための正しい構文はどれですか?

前もって感謝します

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

haskell - Haskell の State の Functor / Applicative インスタンス

モナドに関する Wadler の論文を読んだ (そしてそのいくつかのセクションをざっと読んだ) 後、私は論文をより綿密に調べ、彼が記述した各モナドのファンクターとアプリケーションのインスタンスを定義することにしました。型シノニムの使用

Wadler は状態モナドを定義するために使用します。私は次のようにしています (関連する名前を使用して、後で newtype 宣言で定義できるようにします)。

newtype 宣言で型コンストラクターの使用に切り替えると、たとえば、

すべてがバラバラになります。すべてがわずかな変更にすぎません。たとえば、

ただし、ラムダ式がその型コンストラクター内に隠されているため、GHC では何も実行されません。今私が見る唯一の解決策は、関数を定義することです:

s を 'st' にバインドし、実際に値を返すには、たとえば、

これらの補助機能を使用しない別の方法はありますか?

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

module - OCaml の複数の引数を持つファンクタ

私は次のような状況です:

Mこれは、実装内のタイプのモジュールの特定の実装を使用するタイプのモジュールを生成するために正常に機能しますSomething

ここで、次のように定義された別のモジュールがあるとします。

さまざまな実装があります

問題のポイントは、Mモジュールを2つのものでパラメーター化する必要があるということです:SomethingモジュールとAUモジュールのようなものです

Somethingしかし、与えられた aと与えられた anAUが具体化された両方のものを持つモジュールを生成するジェネリックファンクターが欲しいです。それを簡単に手に入れる方法はありますか?

ファンクターの構文は非常に奇妙で、私はまだ慣れていないので、私が求めていることが簡単な方法で解決できるかどうかはわかりません。

前もって感謝します

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

c++ - 演算子のオーバーロードに関する問題

このコードの問題は何ですか?このコードは私に多くの構文エラーを与えています。また、C++でファンクターが使用される理由も知りたいです。

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

c++ - ファンクターでベクトルを定義する方法

ねえ、私は次のファンクターを実装しました:

ベクトルを次のように定義しようとすると、多くのエラーが発生します。

よろしくお願いします。

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

c++ - ファンクターの呼び出しと関数呼び出しの詳細な違いは?

これが機能する主な理由は、 for_each () が実際には 3 番目の引数が関数であると想定していないためです。3 番目の引数は、適切な引数で呼び出すことができるものであると単純に想定しています。適切に定義されたオブジェクトは、機能と同様に機能し、多くの場合、機能よりも優れています。たとえば、関数へのポインターとして渡される関数をインライン化するよりも、クラスのアプリケーション演算子をインライン化する方が簡単です。その結果、関数オブジェクトは通常の関数よりも高速に実行されることがよくあります。アプリケーション演算子 (§11.9) を持つクラスのオブジェクトは、関数型オブジェクト、ファンクター、または単に関数オブジェクトと呼ばれます。

[Stroustrup、C++ 第 3 版、18.4-最後の段落]

  1. operator()呼び出しは、実行時の関数呼び出しと同じだとずっと思っていました。通常の関数呼び出しとどう違うのですか?

  2. 通常の関数よりもアプリケーション演算子をインライン化する方が簡単なのはなぜですか?

  3. 関数呼び出しよりもどのように高速ですか?