## 23. Equality

LISP has many different ideas of equality. Numerical equality is denoted by `=`. Two symbols are `eq` if and only if they are identical. Two copies of the same list are not `eq`, but they are equal.

> `

>     > (eq 'a 'a)
>     T
>     > (eq 'a 'b)
>     NIL
>     > (= 3 4)
>     T
>     > (eq '(a b c) '(a b c))
>     NIL
>     > (equal '(a b c) '(a b c))
>     T
>     > (eql 'a 'a)
>     T
>     > (eql 3 3)
>     T

> `

The `eql` predicate is equivalent to `eq` for symbols and to `=` for numbers.

The `equal` predicate is equivalent to `eql` for symbols and numbers. It is true for two conses if and only if their cars are equal and their cdrs are equal. It is true for two structures if and only if the structures are the same type and their corresponding fields are equal.