Function CHAR-UPCASE, CHAR-DOWNCASE
char-upcase character => corresponding-character
char-downcase character => corresponding-character
character, corresponding-character - 文字
characterが小文字なら、char-upcaseは大文字を返却します。 それ以外はただ引数の文字をそのまま返却します。
characterが大文字なら、char-downcaseは小文字を返却します。 それ以外はただ引数の文字をそのまま返却します。
characterと返却値では、ただ文字コードの属性のみが違っており、 その他のすべての実装定義の属性は保存されます。
(char-upcase #\a) =>  #\A
(char-upcase #\A) =>  #\A
(char-downcase #\a) =>  #\a
(char-downcase #\A) =>  #\a
(char-upcase #\9) =>  #\9
(char-downcase #\9) =>  #\9
(char-upcase #\@) =>  #\@
(char-downcase #\@) =>  #\@
;; 注意:次の例文は、もしCHAR-CODE-LIMITの値が非常に大きい実装の場合は、
;;       おそらく非常に長い時間かかるだろう。
(dotimes (code char-code-limit)
  (let ((char (code-char code)))
    (when char
      (unless (cond ((upper-case-p char) (char= (char-upcase (char-downcase char)) char))
                    ((lower-case-p char) (char= (char-downcase (char-upcase char)) char))
                     (t (and (char= (char-upcase (char-downcase char)) char)
                             (char= (char-downcase (char-upcase char)) char))))
        (return char)))))
=>  NILなし。
もしcharacterが文字ではなかったら、型type-errorのエラーが生じます。
upper-case-p, alpha-char-p, 13.1.4.3. 文字のケース, 13.1.10. 処理系実装のスクリプトの説明
もしcorresponding-characterがcharacterと違う場合は、 corresponding-characterとcharacter両方に ケース(大文字と小文字のこと)があるということになります。
char-equalは文字の比較の際にケースを無視するため、 corresponding-characterはcharacterとchar-equalでの 比較においては常に等しいです。