You need to enable JavaScript to run this app. Emacs Lisp中eql函数文档的indistinguishable含义是什么?
优惠活动
大模型
产品
解决方案
定价
更多

Emacs Lisp中eql函数文档的indistinguishable含义是什么?

Emacs Lisp eql函数中indistinguishable的具体含义

查阅Emacs Lisp中内置eql函数的文档时,你会看到官方给出的判定逻辑说明:

Return t if the two args are eq or are indistinguishable numbers.
很多人检索完相关配套文档都找不到这里indistinguishable的明确定义,它的实际指代可以从Emacs Lisp的实际运行逻辑拆解:
这里的indistinguishable numbers,特指两个数字在实际使用场景下不存在任何可观测、可感知差异的等价关系,而非要求两个数字必须是同一类型、存储在同一块内存地址上。

具体的判定规则可以归纳为几点:

  • 它补全了eq函数对数字判定的局限性:eq只会比对两个对象的内存地址,哪怕两个数字的数值完全相同,只要创建的时机不同、内存地址不一样,eq就会返回nil;而eql针对数字场景,会跳过地址比对,直接做数值层面的等价判断。
  • 判定的核心边界是“是否存在可观测差异”:
    • 如果两个数字不管类型是整数还是浮点数,在当前环境的精度配置下,做任何运算、对比操作都不会产生不同的结果,就属于indistinguishable的范畴。
    • 如果两个数字存在哪怕极其微小的精度偏差,只要这个偏差可以被运算、对比逻辑检测到,就不属于不可区分的数字。
  • 举两个实际的交互示例:
    • 执行(eql 1 1.0)会返回t,因为整数1和能被当前精度无损表示的浮点数1.0,在所有数字运算场景下都没有可感知差异,符合不可区分的判定。
    • 执行(eql 0.1 0.1000000000000001)会返回nil,因为两个值存在可被检测的精度差,不属于不可区分的范畴。

至于官方文档为什么要用indistinguishable这种偏模糊的表述,本质是因为这个判定的边界跟当前Emacs的数值实现、浮点精度配置直接相关,没有写死的固定判定阈值,所以从实际使用感知的角度做了描述,没有罗列具体的类型、精度判定细则。


内容的提问来源于stack exchange,提问作者Searene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 05:36:08