[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Here we describe two functions that test for equality between any two objects. Other functions test equality between objects of specific types, e.g., strings. For these predicates, see the appropriate chapter describing the data type.
This function returns t
if object1 and object2 are the
same object, nil
otherwise.
eq
returns t
if object1 and object2 are integers
with the same value. Also, since symbol names are normally unique, if the
arguments are symbols with the same name, they are eq
. For other
types (e.g., lists, vectors, strings), two arguments with the same contents
or elements are not necessarily eq
to each other: they are eq
only if they are the same object, meaning that a change in the contents of
one will be reflected by the same change in the contents of the other.
(eq 'foo 'foo) ⇒ t (eq 456 456) ⇒ t (eq "asdf" "asdf") ⇒ nil (eq '(1 (2 (3))) '(1 (2 (3)))) ⇒ nil (setq foo '(1 (2 (3)))) ⇒ (1 (2 (3))) (eq foo foo) ⇒ t (eq foo '(1 (2 (3)))) ⇒ nil (eq [(1 2) 3] [(1 2) 3]) ⇒ nil (eq (point-marker) (point-marker)) ⇒ nil |
The make-symbol
function returns an uninterned symbol, distinct from
the symbol that is used if you write the name in a Lisp expression.
Distinct symbols with the same name are not eq
. @xref{Creating
Symbols}.
(eq (make-symbol "foo") 'foo) ⇒ nil |
This function returns t
if object1 and object2 have equal
components, nil
otherwise. Whereas eq
tests if its arguments
are the same object, equal
looks inside nonidentical arguments to see
if their elements or contents are the same. So, if two objects are
eq
, they are equal
, but the converse is not always true.
(equal 'foo 'foo) ⇒ t (equal 456 456) ⇒ t (equal "asdf" "asdf") ⇒ t (eq "asdf" "asdf") ⇒ nil (equal '(1 (2 (3))) '(1 (2 (3)))) ⇒ t (eq '(1 (2 (3))) '(1 (2 (3)))) ⇒ nil (equal [(1 2) 3] [(1 2) 3]) ⇒ t (eq [(1 2) 3] [(1 2) 3]) ⇒ nil (equal (point-marker) (point-marker)) ⇒ t (eq (point-marker) (point-marker)) ⇒ nil |
Comparison of strings is case-sensitive, but does not take account of text
properties—it compares only the characters in the strings. For technical
reasons, a unibyte string and a multibyte string are equal
if and
only if they contain the same sequence of character codes and all these
codes are either in the range 0 through 127 (ASCII) or 160 through
255 (eight-bit-graphic
). (voir la section Text Representations).
(equal "asdf" "ASDF") ⇒ nil |
However, two distinct buffers are never considered equal
, even if
their textual contents are the same.
The test for equality is implemented recursively; for example, given two
cons cells x and y, (equal x y)
returns
t
if and only if both the expressions below return t
:
(equal (car x) (car y)) (equal (cdr x) (cdr y)) |
Because of this recursive method, circular lists may therefore cause infinite recursion (leading to an error).
[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.