問題タブ [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.
javascript - 乗算は可換ではありませんか?
ECMAScript 言語仕様では、乗算演算子が交換可能 (A*B==B*A) であると指定されています。ただし、A または B に代入演算子が含まれている場合、これは当てはまりません。たとえば、ブラウザのコンソールに次のように入力すると:
ただし、15が得られます。
30を与えます。
それとも可換とは、すべての変数がその値に解決されると可換になることを意味しますか? ただし、仕様では、数学的な乗算操作ではなく、「* 演算子」について説明しています。
postgresql - 内部結合SQLの結合性と可換性
このスキーマがあるとしましょう。
内部結合が結合的かつ可換的であることはわかっていますが、その理由がよくわかりません。
クエリを考えると:
null
セーラーとボートには共通のフィールドがないため、これは戻ってくるべきだと考えています。
セーラーの名前と予約したボートの名前を返す必要があります。
内部結合が交換可能かつ結合的であると想定される理由を教えてください。
ありがとう!
javascript - JavaScript での reduceRight のネイティブ実装が間違っている
f
array の要素に対する連想操作のa
場合、次の関係が成り立つ必要があります:a.reduce(f)
は と同等である必要がありますa.reduceRight(f)
。
実際、それは結合的かつ交換可能な操作にも当てはまります。例えば:
ただし、結合的ではあるが可換的ではない操作には当てはまりません。例えば:
f
forの引数を反転reduceRight
させて同等にする必要があります。
reduceRight
これは、のネイティブ実装が間違っていると私に信じさせます。
reduceRight
この機能は次のように実装する必要があると思います。
result
は前の値 (右側の値) を表すため、関数の 2 番目のパラメーターにするのが理にかなっていますf
。現在の値は左側の値を表します。したがって、現在の値を関数の最初のパラメーターにすることは理にかなっていますf
。このように、可換でない連想操作の場合でも、前述の関係が成り立ちます。
だから、私の質問は次のとおりです。
reduceRight
私が行った方法で実装する方が理にかなっているのではありませんか?- ネイティブが
reduceRight
私のように実装されないのはなぜですか?
arrays - 2 つのバイト配列の可換でない組み合わせ
n1,n2
2 つの数値 (Int、Long、...)を非可換な方法で結合したい場合p*n1 + n2
、p
任意の素数が適切な選択肢のように思えます。
ただし、多くのハッシュ オプションがバイト配列を返すため、現在、数値をバイト配列に置き換えようとしています。
a,b:Array[Byte]
は同じ長さであると仮定します。
+
単純にxor
しかし、「乗算」として何を使用すればよいですか?
p:Long
a(n 任意) 素数、a:Array[Byte]
任意の長さ
もちろん、a
長い乗算に変換してから、結果をバイト配列に戻すこともできます。それに関する問題は、意味をなすために、後続の xor とp*a
同じ長さの " "が必要になることです。a
2 つのバイト配列のうち短い方をゼロ拡張することでこれを回避できますが、その場合、バイト配列の長さが急速に大きくなります。
一方、p
バイト配列に変換して、a
. ここでの問題は、 が に(p*(p*a+b)+c)
なる(a+b+c)
ことです。これは可換であり、望ましくありません。
配列内のすべてのバイトに p を追加できます (オーバーフローを破棄します)。
配列内のすべてのバイトに p を追加できます (オーバーフローを破棄しません)。
a
私はいくつかのビットで循環シフトすることができましたf(p)
(そしてそれが再びならないことを願っていますa
)
そして、もっとナンセンスなことを考えることができました。しかし、私は何をすべきですか?実際には何が理にかなっていますか?
python - 非可換 sympify (または単純化)
Python で文字列から数式を単純化できるようにしたいと考えています。それを行うには、いくつかの「交換可能な」方法があります。そのための非可換関数はありますか?
sympyからのsympifyがいくつかの非可換ジョブを実行できることは知っています。ここに例を示します。
x y -y x と表示されますが、文字列に sympify を適用すると、つまり、
結果は0です。
xとyの非可換性を維持するために上記の文字列を単純化する方法はありますか?
私は誰かがすでにここでそれについて尋ねていることを発見しましたhttp://osdir.com/ml/python-sympy/2012-02/msg00250.htmlそして誰かが答えましたhttp://osdir.com/ml/python-sympy/2012 -02/msg00255.html、ただし、ソリューションは一般的に機能しないようです。
すぐに解決策がない場合は、自分でコーディングする必要があると思います。
plugins - Babel プラグインの実行順序
TL;DR: Babel プラグインの実行順序を指定する方法はありますか? Babel はこの順序をどのように決定しますか? Babelソースに飛び込む以外に、これがどのように機能するかの仕様はありますか?
独自の Babel プラグインを開発しています。実行すると、プラグインが他の es2015 プラグインの前に実行されることに気付きました。たとえば、次のようなコードがあります。
および次のような訪問者:
私のプラグインはArrowFunctionを監視します(Functionではありません)。プラグインが Babel 構成にリストされている順序で遊んでみましたが、何も変わりませんでした。
OTOH、これは順序が何らかの形で重要であるように見えます:
https://phabricator.babeljs.io/T6719
- - 編集 - -
ビジターを次のように書くと、次のことがわかりました。
両方の関数が呼び出されます。したがって、実行の順序は、myplugin_enter -> other_plugin -> myplugin_exit のようになります。つまり、myplugin は内部パイプラインで other_plugin の前にあるようです。ただし、主な質問は同じままです。パイプライン内のプラグインの順序は、何らかの方法で決定および構成可能にする必要があります。
logic - A or B = B or A 証明 (自然演繹)
この問題は、私が作ったものよりも単純であるべきだと思われるので、私の最終的な質問は次のとおりです。これを行うためのより簡単な方法はありますか? 論理的には、私たちはそれを知っています
しかし、自然演繹では、v-Introductions、RAA などを使用して、これらの同等性を証明します。練習問題を解く過程で、この交換可能な性質を証明する必要性に遭遇しましたが、驚くほど難しいと感じています。証明は次のように始まるように私には思えます。
そして今、私たちはドモルガンのことを証明しなければならない立場にいることに気づきました。A v B = B v A の簡単な証明はありませんか?
haskell - Haskell 演算子の可換プロパティ?
両方向に同一の定義を与える必要がないように、演算子が交換可能であることを述べる方法はありますか? 例えば:
ここで、これらの定義の両方を与える必要がなく、一方が他方から暗示されるような方法はありますか? それを述べる方法はありfn = flip fn
ますか?