文字の大文字・小文字変換関数は、単一の文字または文字列の内容の大文字・小文字を変換します。通常、これらの関数はアルファベット文字(文字 ‘A’ から ‘Z’ および ‘a’ から ‘z’ 、ならびに非ASCII文字)のみを変換し、その他の文字は変更されません。ケーステーブルを指定することで、別の大文字・小文字変換マッピングを指定できます(ケーステーブルを参照)。
これらの関数は、引数として渡された文字列を変更しません。
以下の例では、それぞれASCIIコード88と120を持つ文字‘X’および‘x’を使用しています。
この関数は、文字または文字列であるはずの string-or-char を小文字に変換します。
string-or-char が文字列の場合、この関数は、引数に含まれる大文字をそれぞれ小文字に変換した新しい文字列を返します。string-or-char が文字の場合、この関数は対応する小文字(整数)を返します。元の文字が小文字であるか、あるいは文字でない場合、戻り値は元の文字と等しくなります。
(downcase "The cat in the hat")
⇒ "the cat in the hat"
(downcase ?X)
⇒ 120
この関数は、文字または文字列であるはずの string-or-char を大文字に変換します。
string-or-char が文字列の場合、この関数は、引数に含まれる小文字をそれぞれ大文字に変換した新しい文字列を返します。string-or-char が文字の場合、この関数は対応する大文字(整数)を返します。元の文字が大文字であるか、あるいは文字でない場合、戻り値は元の文字と等しくなります。
(upcase "The cat in the hat")
⇒ "THE CAT IN THE HAT"
(upcase ?x)
⇒ 88
この関数は、文字列や文字を大文字に変換します。string-or-char が文字列の場合、この関数は string-or-char の各単語を大文字に変換したコピーを内容とする新しい文字列を返します。つまり、各単語の先頭文字は大文字に、それ以外の文字は小文字に変換されます。
単語の定義とは、現在の構文テーブルにおいて単語構成要素構文クラスに割り当てられた、連続する任意の文字列のことである(構文クラス表を参照)。case-symbols-as-words が nil
でない場合、記号構成要素構文クラスに割り当てられた文字も単語構成要素とみなされる。
string-or-char が文字の場合、この関数は upcase と同じ動作をします。
(capitalize "The cat in the hat")
⇒ "The Cat In The Hat"
(capitalize "THE 77TH-HATTED CAT")
⇒ "The 77th-Hatted Cat"
(capitalize ?x)
⇒ 88
string-or-char が文字列の場合、この関数は string-or-char の各単語の頭文字を大文字にし、頭文字以外の文字は変更しません。そして、string-or-char のコピーの各単語の頭文字を大文字に変換した新しい文字列を返します。
この関数における単語の定義は、前述の capitalize で説明したものと同様であり、case-symbols-as-words も単語構成文字に対して同様の効果を持ちます。
upcase-initials の引数が文字の場合、upcase-initials は upcase
と同じ結果になります。
(upcase-initials "The CAT in the hAt")
⇒ "The CAT In The HAt"
なお、大文字・小文字の変換はコードポイントと1対1の対応関係にあるわけではなく、結果の長さが引数の長さと異なる場合があります。さらに、文字を渡すと戻り値の型が文字に強制されるため、関数で適切な置換が行えず、1文字の文字列として扱った場合と結果が異なる可能性があります。例えば:
(upcase "fi") ; note: single character, ligature "fi"
⇒ "FI"
(upcase ?fi)
⇒ 64257 ; i.e. ?fi
これを避けるには、文字を大文字・小文字変換関数のいずれかに渡す前に、string
関数を用いてまず文字列に変換する必要があります。当然ながら、結果の長さについていかなる前提も置くことはできません。
他の文字にも特殊な大文字・小文字変換規則が設定されている場合があります。これらの文字はすべて、Unicode標準で定義されたnil以外の文字プロパティspecial-uppercase、special-lowercase、またはspecial-titlecase(文字プロパティを参照)を持っています。これらのプロパティは、現在の大文字・小文字変換テーブル(大文字・小文字変換テーブルを参照)を上書きする特殊な大文字・小文字変換規則を定義します。
文字列を比較する関数については、文字と文字列の比較を参照してください。これらの関数の中には、大文字と小文字の区別を無視するもの、あるいは任意で無視できるものがあります。