问题描述
我正在阅读一个名为 eql
的 Emacs Lisp 函数的文档:
Return t if the two args are eq or are indistinguishable numbers.
这里的 indistinguishable
是什么意思?我一直在搜索文档,但没有找到解释。
解决方法
eq
谓词仅在比较相同的对象时才返回 t
。但是不能保证比较相等的两个值是同一个对象;两个具有相同值的文字甚至不能保证是同一个对象。因此,(eq 1 1)
可能会也可能不会评估为 t
。对于数字类型,eql
比较值,因此 (eql 1 1)
将始终评估为 t
。但是,eql
有点微妙:(eql 1 1.0)
将评估为 'nil
,因为 1
和 1.0
不是不可区分,即,它们不共享相同的类型。因此,在引用的上下文中,不可区分意味着操作数具有相同的类型和相同的值。