# Pastebin cnvKmkNi \proto{eqv?}{ \vari{obj} \varii{obj}}{procedure}} The {\cf eqv?} procedure defines a useful equivalence relation on objects. Briefly, it returns \schtrue{} if \vari{obj} and \varii{obj} are normally regarded as the same object. This relation is left slightly open to interpretation, but the following partial specification of {\cf eqv?} holds for all implementations of Scheme. The {\cf eqv?} procedure returns \schtrue{} if: \begin{itemize} \item \vari{obj} and \varii{obj} are both \schtrue{} or both \schfalse. \item \vari{obj} and \varii{obj} are both symbols and are the same symbol according to the {\cf symbol=?} procedure (section~\ref{symbolsection}). \item \vari{obj} and \varii{obj} are both exact numbers and are numerically equal (in the sense of {\cf =}). \item \vari{obj} and \varii{obj} are both inexact numbers such that they are numerically equal (in the sense of {\cf =}) and they yield the same results (in the sense of {\cf eqv?}) when passed as arguments to any other procedure that can be defined as a finite composition of Scheme's standard arithmetic procedures, provided it does not result in a NaN value. \item \vari{obj} and \varii{obj} are both characters and are the same character according to the {\cf char=?} procedure (section~\ref{charactersection}). \item \vari{obj} and \varii{obj} are both the empty list. \item \vari{obj} and \varii{obj} are pairs, vectors, bytevectors, records, or strings that denote the same location in the store (section~\ref{storagemodel}). \item \vari{obj} and \varii{obj} are procedures whose location tags are equal (section~\ref{lambda}). \end{itemize} The {\cf eqv?} procedure returns \schfalse{} if: \begin{itemize} \item \vari{obj} and \varii{obj} are of different types (section~\ref{disjointness}). \item one of \vari{obj} and \varii{obj} is \schtrue{} but the other is \schfalse{}. \item \vari{obj} and \varii{obj} are symbols but are not the same symbol according to the {\cf symbol=?} procedure (section~\ref{symbolsection}). \item one of \vari{obj} and \varii{obj} is an exact number but the other is an inexact number. \item \vari{obj} and \varii{obj} are both exact numbers and are numerically unequal (in the sense of {\cf =}). \item \vari{obj} and \varii{obj} are both inexact numbers such that either they are numerically unequal (in the sense of {\cf =}), or they do not yield the same results (in the sense of {\cf eqv?}) when passed as arguments to any other procedure that can be defined as a finite composition of Scheme's standard arithmetic procedures, provided it does not result in a NaN value. As an exception, the behavior of {\cf eqv?} is unspecified when both \vari{obj} and \varii{obj} are NaN. \item \vari{obj} and \varii{obj} are characters for which the {\cf char=?} procedure returns \schfalse{}. \item one of \vari{obj} and \varii{obj} is the empty list but the other is not. \item \vari{obj} and \varii{obj} are pairs, vectors, bytevectors, records, or strings that denote distinct locations. \item \vari{obj} and \varii{obj} are procedures that would behave differently (return different values or have different side effects) for some arguments. \end{itemize}