【发布时间】:2018-01-17 04:52:13
【问题描述】:
考虑 2+7 == 3+6 (mod 5)。你能知道如何使用 scala 语法糖在 scala 代码中实现相同的功能吗?
请记住,2+7 和 3+6 是常规的 scala Int,因此将 + 或 == 覆盖为 mod 5 不起作用。我实际上对代数 A 上更复杂的同余感兴趣。我可以做A.congruent(a,b),并用一些不错的符号(如A.~(a,b))来写,但我对a == b (A) 或a ==(A) b 或A(a == b) 感兴趣。在 a 和 b 之间出现一致的东西。
我的斗争的底线是,同余是为类型A 定义的,a,b 是传递给A 但实际上不是A 类型的一些元素。例如。 A 可能是一组矩阵,如果单个矩阵 a 和 b 相差一个标量,即a*b^-1=sI_n,则一致。特别是,a、b 将存在于许多组中,并且一致性将基于此而改变。所以我不可能简单地将a 和b 中的引用添加回A。
正确的解决方案似乎是数学解决方案,用A而不是变量a和b标记等价。然而 scala 语法糖可能没有这样的甜蜜。任何建议表示赞赏。
【问题讨论】:
-
为了澄清上下文,我很高兴有一个只是欺骗 REPL 的解决方案。如果用户正在编写自己的实际代码,那么像
A.cong(a,b)这样的前缀符号不会抛出它们。但是不怎么写代码的学生和老师更喜欢书本中的中缀风格。
标签: scala syntax equivalence