8.5.2. Equivalence

(equal? obj1 obj2)

The equal? procedure defines an equivalence relation on objects. It returns #t if obj1 and obj2 should be regarded as the same object, and otherwise returns #f. For objects that have external representations, two objects shall be the same if their external representations are the same. If each of obj1 and obj2 is of type boolean, symbol, char, pair, quantity, or string, then the equal? procedure shall return #t if and only if:

If one of obj1 and obj2 is a procedure and the other is not, then equal? shall return #f. If obj1 and obj2 are both procedures then equal? shall return #f if obj1 and obj2 would return a different value for some arguments, and otherwise shall return either #t or #f.

NOTE 12: In other words equality for procedures is not well defined.