问题标签 [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 投票
1 回答
231 浏览

javascript - 乘法不是可交换的?

ECMAScript 语言规范指定乘法运算符是可交换的 (A*B==B*A)。但是,如果 A 或 B 包含赋值运算符,则不成立。例如,如果我在浏览器的控制台中键入以下内容:

给出 15,但是:

给 30。

或者可交换是否意味着一旦所有变量都被解析为它们的值,它就是可交换的?然而,规范讨论的是“* 运算符”,而不是数学乘法运算。

0 投票
1 回答
566 浏览

postgresql - 内连接sql的结合性和交换性

假设我有这个模式。

我知道内部连接应该是关联的和可交换的,但我无法真正理解为什么。

给定查询:

我认为这应该返回null,因为 Sailors 和 Boats 没有共同的领域,而:

应该返回水手的名字和他们保留的船的名字。

请告诉我为什么内部连接应该是可交换的和关联的。

谢谢!

0 投票
1 回答
1123 浏览

javascript - JavaScript 中 reduceRight 的原生实现是错误的

f对于array 元素的关联操作a,以下关系应该成立:a.reduce(f)应该等价于a.reduceRight(f)

事实上,它确实适用于关联和交换的操作。例如:

但是,它不适用于关联但不可交换的操作。例如:

我们需要翻转 for 的参数freduceRight使它们等效:

这让我相信原生实现reduceRight是错误的。

我认为该reduceRight功能应实现如下:

由于result表示前一个值(右侧值),因此将其作为函数的第二个参数是有意义的f。当前值表示左侧值。因此,将当前值作为函数的第一个参数是有意义的f。这样,即使对于非交换关联运算,上述关系也成立。

所以,我的问题是:

  1. reduceRight以我的方式实施不是更有意义吗?
  2. 为什么本机reduceRight没有按照我的方式实现?
0 投票
2 回答
128 浏览

solver - 用结合和交换算子求解方程

0 投票
2 回答
219 浏览

java - 有没有办法在 php 中使用交换加密?

我已经使用这个答案encrypt中的anddecrypt函数来实现使用三通协议和 Blowfish 密码的消息传递。

我尝试使用交换加密/解密。那是,

但它不起作用。我使用了一个键而不是 2 个不同的键,它可以工作(必须!)。

所以我使用这些功能的方式没有问题,但我根本无法使用两个键。

难道我做错了什么?这是不可能的,还是有其他方法?

或者,有没有办法在 Java 中做到这一点?

编辑:对于那些不了解该过程的人,三通协议是一种无需发送密钥即可发送加密消息的方法。所以程序是

  1. 发送者使用 key1 加密并发送

  2. 接收方用 key2 加密并发回

  3. 发件人用 key1 解密并发回

  4. 接收方用key2解密得到原始消息

您可以看到没有交换密钥,但消息仅以加密形式发送。这就是重点。

0 投票
1 回答
116 浏览

arrays - 两个字节数组的非交换组合

如果我想以n1,n2非交换方式组合两个数字(Int,Long,...),那么任意素数p*n1 + n2在哪里p似乎是一个足够合理的选择。

但是,由于许多散列选项返回一个字节数组,我现在尝试用字节数组替换数字。

假设a,b:Array[Byte]长度相同。

+简单地变成了一个xor

但我应该用什么作为“乘法”?

p:Long一个(n 任意)素数a:Array[Byte]任意长度

当然,我可以转换a为长整数乘法,然后将结果转换回字节数组。这样做的问题是我需要 " p*a" 的长度与随后的 xor 的长度相同a才能有意义。我可以通过零扩展两个字节数组中较短的一个来规避这个问题,但随后字节数组的长度会迅速增长。

另一方面,我可以转换p为字节数组并与a. 在这里,问题是 then(p*(p*a+b)+c)变成(a+b+c),这是可交换的,我们不想要。

我可以将 p 添加到数组中的每个字节(丢弃溢出)。

我可以将 p 添加到数组中的每个字节(而不是丢弃溢出)。

我可以循环移动a一些f(p)位(并希望它不会a再次变成)

我还能想到更多的废话。但是我该怎么?实际上有什么意义?

0 投票
2 回答
2412 浏览

python - 非交换的 sympify(或化简)

我希望能够从 Python 中的字符串简化数学表达式。有几种“交换”方式可以做到这一点。有非交换函数吗?

我知道sympysympify可以做一些非交换的工作,这里有一个例子:

它将打印 x y -y x,但是如果我们将 sympify 应用于字符串,即

结果是0

有没有办法简化上述字符串以保持xy的非交换性?

我发现这里已经有人问过了http://osdir.com/ml/python-sympy/2012-02/msg00250.html有人回答了http://osdir.com/ml/python-sympy/2012 -02/msg00255.html,但是该解决方案似乎通常不起作用。

我更愿意先问,如果没有直接的解决方案,我想我将不得不自己编写代码。

0 投票
2 回答
6535 浏览

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 之前。然而,主要问题保持不变 - 管道中插件的顺序应该以某种方式确定和配置。

0 投票
3 回答
1632 浏览

logic - A or B = B or A 证明(自然演绎)

这个问题感觉应该比我做的更简单,所以我的最终问题是:有没有更简单的方法来做到这一点?在逻辑上我们知道

但是在自然演绎中,我们使用我们的 v-Introductions、RAA 等来证明这些等价性。在解决一个实践问题的过程中,我遇到了证明这个交换性质的需要,但发现它非常困难。在我看来,证明将像这样开始:

现在我们发现自己处于必须证明 deMorgan 的境地。没有更简单的 A v B = B v A 证明吗?

0 投票
2 回答
751 浏览

haskell - Haskell 运算符的交换性质?

有没有办法说明运算符是可交换的,这样我就不必为两个方向给出相同的定义?例如:

在这里,有没有一种方法可以让我不必同时给出这两个定义,其中一个会从另一个中暗示出来?有什么办法可以说明fn = flip fn吗?