问题标签 [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),我是否需要实现 2 个重载,每种情况一个?

还是编译器自行决定的一般形式?

谢谢

0 投票
4 回答
694 浏览

haskell - 如何指定类型类中的两个操作通勤?

我开始阅读这篇关于 CRDTs的论文,这是一种通过确保修改数据的操作是可交换的来同时共享可修改数据的方法。在我看来,这将是 Haskell 中抽象的一个很好的候选者——为 CRDT 提供一个类型类,它指定一个数据类型和在该类型上通勤的操作,然后致力于使库在并发进程之间实际共享更新。

我想不通的是如何在类型类的规范中表达操作必须通勤的合同。

举个简单的例子:

不能保证turnLeft . turnRightturnRight . turnLeft. 我想后备是指定单子定律的等效项-使用注释来指定类型系统未强制执行的约束。

0 投票
4 回答
6615 浏览

ruby - 3 等于或大小写相等运算符

在 Ruby中Integer === 5返回true. 同样String === "karthik"返回true.
但是,5 === Integer返回false. 和"karthik" === String
为什么运算符不可交换?

0 投票
3 回答
552 浏览

haskell - 放松一元计算中的排序约束

这里有一些值得深思的地方。

当我编写 monadic 代码时,monad 会对完成的操作进行排序。例如,如果我在 IO monad 中编写:

我知道doSomething之前会被处决doSomethingElse

现在,考虑类似 C 语言的等效代码:

C 的语义实际上并没有指定这两个函数调用的评估顺序,因此编译器可以随意移动。

我的问题是这样的:我将如何在 Haskell 中编写单子代码,这也使这个评估顺序未定义?理想情况下,当我的编译器的优化器查看代码并开始移动时,我会获得一些好处。

以下是一些可能无法完成工作但具有正确“精神”的技术:

  • 以函数式编写代码,即编写plus doSomething doSomethingElse并让plus调度单子调用。缺点:您无法共享单子操作的结果,并且plus仍然决定何时评估事物。
  • 使用惰性 IO,即 ,unsafeInterleaveIO将调度推迟到评估惰性的需求。但是惰性与未定义顺序的严格不同:特别是我确实希望我的所有一元动作都能被执行。
  • 惰性 IO,结合立即对所有参数进行排序。特别是,seq不强加排序约束。

从这个意义上说,我想要一些比一元排序更灵活但不如完全惰性的东西。

0 投票
2 回答
1654 浏览

haskell - 我如何确定一个单子是否可交换?

Control.Monad.List.ListT的文档声明它“除非参数 monad 是可交换的,否则不会产生 monad”。

  1. 我如何确定一个单子是否可交换?有 CommutativeMonad 类型类吗?应该有吗?

  2. 特别是,Control.Monad.RWS.Lazy.RWS是可交换的单子吗?

0 投票
2 回答
464 浏览

haskell - 自动和确定性地测试一个函数的关联性、交换性等

是否可以构造一个高阶函数isAssociative,它接受另一个有两个参数的函数并确定该函数是否是关联的?

类似的问题,但也适用于其他属性,例如交换性。

如果这是不可能的,有没有办法用任何语言自动化它?如果有我感兴趣的 Agda、Coq 或 Prolog 解决方案。

我可以设想一个蛮力解决方案,它检查每个可能的参数组合并且永不终止。但是在这种情况下,“永不终止”是一个不受欢迎的属性。

0 投票
2 回答
1444 浏览

prolog - 在 Prolog 中表达“交换性”的替代方法?

作为 Prolog 的初学者,我发现 Prolog 中的交换表达式非常不直观。

例如,如果我想表达 X 和 Y 在一个家庭中,例如:

我还应该在定义中添加以下内容,以使其“可交换”:

但是我们使用 Prolog,因为我们想编写优雅的代码……所以,我希望在原始代码中只添加一行(而不是上面的三行):

这是要点。它导致终止!为什么 prolog 不那么“合乎逻辑”?是否有替代这种简洁的单行表达式不会导致终止的替代方法?

周末愉快!瓦

0 投票
1 回答
295 浏览

haskell - 真正无序的折叠包

我想要一个能对客户隐藏其“真实”订单的 Bag 容器。

它还必须是完全多态的,即不需要对其元素类型进行任何约束。

我发现了至少三个包的实现:Bagmodule from ghcpackage、Data.BagfrombagMath.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/1并且connected/2我已经定义了以下规则:

由于我现在理解的原因(我认为),这进入了无限递归。

然后,我尝试搜索 SO 并发现了这个问题:Alternative to express "Commutativity" in Prolog? . 根据提供的答案,我尝试将上述事实更改为以下内容:

然而,这并没有给我我希望的结果。如果我定义一个规则connected(t1,t7),我希望yes如果我问这个问题connected(t7,t1)

0 投票
2 回答
118 浏览

sql-server-2008 - 如何优化涉及内部连接的条件子选择?

我有一个 SQL 查询(MS SQL 2008),我想在速度方面进行优化。它具有以下结构(实际上只有在 case 语句中有 10 种不同的 when-cases)。

重要的位是 case 语句中的子选择,涉及附加表之间的内部连接和对 FROM 子句(table1)中的一个表的引用。

我在想我可以在 FROM 子句中使用左(外部)连接而不是子选择来优化它,但我不确定,因为子选择也涉及内部连接。然后我会在 FROM 子句中使用两个左连接,现在我在子选择中使用内部连接吗?从第二个 when-case 开始,这将如何与 AnotherTable3 一起工作?

任何想法都非常感谢。