我读过几个使用等价符号的数学和计算机科学实例?
(基本上是一个带有三行的'='),对我来说,读这个就好像是平等一样.这两个概念有什么区别?
维基百科:等价关系:
在数学中,等价关系是集合中两个元素之间的二元关系,它们将它们组合在一起,以某种方式"等同".设a,b和c为某个集合X的任意元素.然后"a~b"或"a≡b"表示a等于b.
等价关系"〜"是反身的,对称的和传递的.
换句话说,=只是等价关系的一个实例.
编辑:这种看似简单的反身,对称和传递的标准并不总是微不足道的.参见Bloch的Effective Java 2nd ed p.35例如,
public final class CaseInsensitiveString { ... // broken @Override public boolean equals(Object o) { if (o instance of CaseInsensitiveString) return s.equalsIgnoreCase( ((CaseInsensitiveString) o).s); if (o instanceof String) // One-way interoperability! return s.equalsIgnoreCase((String) o); return false; } ... }
以上等于实现打破了对称性,因为CaseInsensitiveString
知道String
类,但String
类不知道CaseInsensitiveString
.
我把你的问题看作是数学符号而不是编程.您引用的三重等号可以用≡
HTML或\equiv
LaTeX 编写.
a≡b最常见的意思是"a被定义为b"或"令a等于b".
所以2 + 2 = 4但是φ≡(1 + sqrt(5))/ 2.
这是一个方便的等价表:
Mathematicians Computer scientists -------------- ------------------- = == ? =
(关于等价关系的其他答案也是正确的,但我认为这些并不常见.还有一个≡b(mod m),发音为"a与b,mod m一致",并且用程序员的说法表示作为mod(a,m)== mod(b,m).换句话说,a和b在用m修改之后是相等的.)
许多语言区分对象的相等性和这些对象的值的相等性.
例如,Ruby有3种不同的方法来测试相等性.第一个,相等?,比较两个变量,看它们是否指向同一个实例.这相当于一种C风格的语言,即检查2个指针是否指向同一地址.第二种方法==,测试值相等性.所以3 == 3.0在这种情况下是正确的.第三个,eql ?,比较值和类类型.
Lisp还有不同的平等概念,具体取决于您要测试的内容.
在我所看到的区分平等和等价的语言中,平等通常意味着类型和值是相同的,而等价意味着只有值是相同的.例如:
int i = 3; double d = 3.0;
我和d将具有等价关系,因为它们代表相同的值而不是相等,因为它们具有不同的类型.其他语言可能有不同的等价思想(例如两个变量是否代表同一个对象).