Subject: Re: Specialized equal From: Erik Naggum <erik@naggum.net> Date: Tue, 20 Nov 2001 21:29:28 GMT Newsgroups: comp.lang.lisp Message-ID: <3215280566337392@naggum.net> * Jochen Schmidt | Testing for identity is easily done by a pointer comparison. I think it is most pedagogical to quickly say that eq compares machine words with machine instructions and then make sure that you answer "use eql, instead" when the newbie asks about the internal representation of Lisp objects. I would say that eq is for advanced users. If a machine word cannot hold a number, it needs to be stored elsewhere. This is the difference between a fixnum and bignum. | And be ensured that both behaviors EQ _and_ EQL is useful because it | might be _very_ interesting for some applications to compare | non-immediate numbers like bignums by reference! (Think of topics like | ressource-management, memory-management a. s. o.) I think the more important reason is that eq can, and is expected to, be implemented with a single machine instruction, while eql has no upper bound on its execution time. (Consider comparing for equality when the numbers differ only in the bit compared last, and that there is no upper bound on the number of bits in a number.) If eq is true, eql is true, but if eq is false, eql can only be true if the object types are eq and are numbers. So the cost of eql is relatively small until you compare bignums or floats, but if you know you are not comparing numbers, I prefer to make that knowledge explicit by using eq. /// -- Norway is now run by a priest from the fundamentalist Christian People's Party, the fifth largest party representing one eighth of the electorate. -- Carrying a Swiss Army pocket knife in Oslo, Norway, is a criminal offense.