2009-06-02 62 views
6
> (eq? 1 1) 
    #t 
    > (eq? 1.1 1.1) 
    #f 
    > (= 1.1 1.1) 
    #t 

这是DrScheme中的交互窗口。有人可以解释=和eq之间的区别吗?在计划?eq之间的区别?和=在计划?

+4

更有趣的问题是`eq?`,`equal?`和`eqv?`之间的区别吗? – newacct 2011-12-06 05:26:48

回答

9

=比较数字。情商?测试参数是否表示内存中的相同数据对象。 EQV?应该在第二种情况下工作,因为它测试与eq相同?但专门测试原语。 More on equlivence predicates in scheme here

1

第一个区别:eq?可以与任何值对配合使用,而=可以与任意数量的数字配合使用。

还有其他几种equivalence predicates。他们中的大多数只接受两个参数。 =定义在'numbers' chapter

3

我猜想,因为

EQ?除非其参数 代表与内存中相同的数据 对象;

方案商店不精确的数字(1.1)从具体的数字 不同(1)

两个1.1论据不驻留在同一个地方的内存并返回# f为eq?

Wikipedia Reference

3

EQ?数字上的是不可预知的。数字文字是嵌入式的,以便相同的数字在内存中的相同位置。例如,Racket语言最近选择在阅读期间实习这些文字。 http://www.mail-archive.com/[email protected]/msg04893.html

您将无法确定您的语言实现的运行时是否将唯一地表示每个数字。这可能会影响装箱的值,例如浮点数和bignums。这就是为什么=作为数字的谓词存在的原因:它检查内容的平等性,而不是浅指针相等。

这是不是排他性像计划的语言:平等VS equalness Python中发生(==)为例。

相关问题