問題タブ [commutativity]

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

c++ - 2 つの異なるオブジェクトの交換演算子のオーバーロード +

行列を表す 2 つのクラスがあり
ます。1. RegularMatrix - O(n^2) 表現
2. SparseMatrix - リンクされたリスト (ゼロなし) として表される行列。

私が持っているとしましょう:

私はできるようになりたい:

また:

だから私は + 演算子をオーバーロードしています。私の質問は、追加を可換 (a+b = b+a) にしたいので、ケースごとに 1 つずつ、2 つのオーバーロードを実装する必要があるかどうかです。

または、コンパイラが独自に決定する一般的な形式はありますか?

ありがとうございました

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

haskell - 2つの操作が型クラスで通勤するように指定するにはどうすればよいですか?

私はCRDTについてこの論文を読み始めました。これは、データを変更する操作が可換であることを確認することにより、変更可能なデータを同時に共有する方法です。これはHaskellでの抽象化の良い候補であるように思われました-データ型とその型で通勤する操作を指定するCRDTの型クラスを提供し、並行プロセス間で実際に更新を共有するライブラリの作成に取り組みます。

私が理解できないのは、型クラスの仕様で操作が通勤しなければならないという契約をどのように表現するかです。

簡単な例:

turnLeft . turnRightと同じであるという保証はありませんturnRight . turnLeft。フォールバックは、モナドの法則に相当するものを指定することだと思います。コメントを使用して、型システムによって強制されない制約を指定します。

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

ruby - 3 Equals または Case Equality 演算子

Ruby ではをInteger === 5返しますtrue。同様にをString === "karthik"返しますtrue
ただし、5 === Integer返品しますfalse。そして"karthik" === String
演算子が可換でないのはなぜですか?

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

haskell - モナディック計算で順序の制約を緩和する

ここに考えるべき食べ物があります。

モナドコードを書くとき、モナドは実行された操作に順序を課します。たとえば、IOモナドに書き込む場合:

私はdoSomething前に実行されることを知っていますdoSomethingElse

ここで、Cのような言語の同等のコードを考えてみましょう。

Cのセマンティクスは、これら2つの関数呼び出しが評価される順序を実際には指定しないため、コンパイラーは自由に物事を自由に移動できます。

私の質問はこれです:この評価順序も未定義のままにするHaskellでモナディックコードをどのように書くのですか?理想的には、コンパイラのオプティマイザがコードを調べて動き始めたときに、いくつかのメリットを享受できます。

仕事を成し遂げることができないが、正しい「精神」にあるいくつかの可能なテクニックはここにあります:

  • 機能的なスタイルでコードを記述します。つまり、モナディック呼び出しを記述plus doSomething doSomethingElseしてplusスケジュールします。欠点:モナディックアクションの結果の共有を失い、plusそれでも物事がいつ評価されるかについて決定を下します。
  • 遅延IOを使用します。つまりunsafeInterleaveIO、評価の遅延を要求するようにスケジューリングを延期します。しかし、怠惰は、順序が定義されていない厳密なものとは異なります。特に、すべてのモナディックアクションを実行する必要があります。
  • レイジーIO、すべての引数をすぐにシーケンスすることと組み合わせる。特に、seq順序の制約を課しません。

この意味で、私は単調な順序付けよりも柔軟性がありますが、完全な怠惰よりも柔軟性が低いものが必要です。

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

haskell - モナドが交換可能かどうかを調べるにはどうすればよいですか?

Control.Monad.List.ListTのドキュメントには、「引数のモナドが交換可能でない限り、モナドを生成しない」と記載されています。

  1. モナドが交換可能かどうかを調べるにはどうすればよいですか? CommutativeMonad 型クラスはありますか? あるべきですか?

  2. 特に、Control.Monad.RWS.Lazy.RWSは可換モナドですか?

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

haskell - 関数の結合性、交換性などを自動的かつ決定論的にテストする

isAssociative2 つの引数を持つ別の関数を取り、その関数が連想的かどうかを判断する高階関数を構築することは可能ですか?

同様の質問ですが、交換性などの他のプロパティについても同様です。

これが不可能な場合、任意の言語で自動化する方法はありますか? Agda、Coq、または Prolog ソリューションがあれば、興味があります。

考えられるすべての引数の組み合わせをチェックし、決して終了しないブルート フォース ソリューションを思い描くことができます。しかし、「決して終了しない」は、このコンテキストでは望ましくないプロパティです。

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

prolog - Prologで「可換性」を表現する代わりに?

Prolog の初心者として、Prolog の可換式はまったく直感的ではないことがわかりました。

たとえば、X と Y が 1 つのファミリに属していることを表現したい場合は、次のようになります。

また、「交換可能」にするために、定義に次を追加する必要があります。

しかし、エレガントなコードを書きたいので、Prologを使用しています...したがって、元のコードに(上記の3行ではなく)1行だけ追加したいと思います:

ここがPOINTです。それは未終了につながります!プロローグがそれほど「論理的」ではないのはなぜですか? そして、未終了につながらない、このきちんとした 1 行の表現に代わるものはありますか?

素敵な週末を!ワット

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

haskell - まさに無秩序な折りたたみバッグ

クライアントから「実際の」注文を隠す Bag コンテナーが必要です。

また、完全にポリモーフィックである必要があります。つまり、要素の型に対する制約は必要ありません。

少なくとも 3 つのバッグの実装が見つかりました: Bagmodule from ghcpackage、Data.BagfrombagおよびMath.Combinatorics.Multisetfrom multiset-comb

ただし、それらにはすべて、実装の詳細またはバッグ構築の順序に依存する要素の内部順序を公開する操作がありますtoListfold*

toList少なくとも type では不可能Bag a -> [a]です。ただし、折り畳みによって常に順序が明らかになるとは限りません。

たとえば、fold (+) 0露出しません。

問題は、折りたたみインターフェースをどのように設計すればよいかということです。a -> a -> aフォールディング機能の安全性に必要十分条件はありますか?は順序を公開していないためfmap、 で折りたたむと汎用性が失われa -> b -> bますか?

私は可換モノイドについて考えています - それらは十分に思えますが、結合性と恒等要素が必要かどうかはわかりません。

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

prolog - Prologで可換性を実装しようとしています

ナレッジベースを作成しようとしています。私の問題はterminal/1connected/2次のルールを定義しました。

私が今理解している理由(私は思う)のために、これは無限の再帰に入りました。

それから、私はSOを検索してみて、この質問を見つけました:Prologで「可換性」を表現するための代替案? 。提供された回答に基づいて、上記の事実を次のように変更しようとしました。

しかし、これは私が望んでいた結果を私に与えません。ルールを定義する場合、質問をconnected(t1,t7)すると取得したいと思っています。yesconnected(t7,t1)

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

sql-server-2008 - 内部結合を含む条件付き副選択を最適化する方法は?

速度を最適化したい SQL クエリ (MS SQL 2008) があります。次のような構造になっています (実際には、case ステートメントに 10 個の異なる when-case があります)。

重要なビットは、追加のテーブル間の内部結合と、FROM 句 (table1) 内のテーブルの 1 つへの参照を含む、case ステートメントのサブ選択です。

サブ選択の代わりに FROM 句で左 (外部) 結合を使用してこれを最適化できると考えていましたが、サブ選択には内部結合も含まれているため、確信が持てません。次に、サブ選択で内部結合を使用している FROM 句で 2 つの左結合を使用しますか? そして、それは 2 番目の when-case の AnotherTable3 でどのように機能しますか?

どんなアイデアでも大歓迎です。