问题标签 [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
,因为 Sailors 和 Boats 没有共同的领域,而:
应该返回水手的名字和他们保留的船的名字。
请告诉我为什么内部连接应该是可交换的和关联的。
谢谢!
javascript - JavaScript 中 reduceRight 的原生实现是错误的
f
对于array 元素的关联操作a
,以下关系应该成立:a.reduce(f)
应该等价于a.reduceRight(f)
。
事实上,它确实适用于关联和交换的操作。例如:
但是,它不适用于关联但不可交换的操作。例如:
我们需要翻转 for 的参数f
以reduceRight
使它们等效:
这让我相信原生实现reduceRight
是错误的。
我认为该reduceRight
功能应实现如下:
由于result
表示前一个值(右侧值),因此将其作为函数的第二个参数是有意义的f
。当前值表示左侧值。因此,将当前值作为函数的第一个参数是有意义的f
。这样,即使对于非交换关联运算,上述关系也成立。
所以,我的问题是:
reduceRight
以我的方式实施不是更有意义吗?- 为什么本机
reduceRight
没有按照我的方式实现?
java - 有没有办法在 php 中使用交换加密?
我已经使用这个答案encrypt
中的anddecrypt
函数来实现使用三通协议和 Blowfish 密码的消息传递。
我尝试使用交换加密/解密。那是,
但它不起作用。我使用了一个键而不是 2 个不同的键,它可以工作(必须!)。
所以我使用这些功能的方式没有问题,但我根本无法使用两个键。
难道我做错了什么?这是不可能的,还是有其他方法?
或者,有没有办法在 Java 中做到这一点?
编辑:对于那些不了解该过程的人,三通协议是一种无需发送密钥即可发送加密消息的方法。所以程序是
发送者使用 key1 加密并发送
接收方用 key2 加密并发回
发件人用 key1 解密并发回
接收方用key2解密得到原始消息
您可以看到没有交换密钥,但消息仅以加密形式发送。这就是重点。
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
再次变成)
我还能想到更多的废话。但是我该怎么办?实际上有什么意义?
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 等来证明这些等价性。在解决一个实践问题的过程中,我遇到了证明这个交换性质的需要,但发现它非常困难。在我看来,证明将像这样开始:
现在我们发现自己处于必须证明 deMorgan 的境地。没有更简单的 A v B = B v A 证明吗?
haskell - Haskell 运算符的交换性质?
有没有办法说明运算符是可交换的,这样我就不必为两个方向给出相同的定义?例如:
在这里,有没有一种方法可以让我不必同时给出这两个定义,其中一个会从另一个中暗示出来?有什么办法可以说明fn = flip fn
吗?