% Function CHAR=, CHAR/=, CHAR<, CHAR>, CHAR<=, CHAR>=, CHAR-EQUAL, CHAR-NOT-EQUAL, CHAR-LESSP, CHAR-GREATERP, CHAR-NOT-GREATERP, CHAR-NOT-LESSP
Function CHAR=, CHAR/=, CHAR<, CHAR>, CHAR<=, CHAR>=,
CHAR-EQUAL, CHAR-NOT-EQUAL,
CHAR-LESSP, CHAR-GREATERP,
CHAR-NOT-GREATERP, CHAR-NOT-LESSP
char= &rest characters+ => generalized-boolean
char/= &rest characters+ => generalized-boolean
char< &rest characters+ => generalized-boolean
char> &rest characters+ => generalized-boolean
char<= &rest characters+ => generalized-boolean
char>= &rest characters+ => generalized-boolean
char-equal &rest characters+ => generalized-boolean
char-not-equal &rest characters+ => generalized-boolean
char-lessp &rest characters+ => generalized-boolean
char-greaterp &rest characters+ => generalized-boolean
char-not-greaterp &rest characters+ => generalized-boolean
char-not-lessp &rest characters+ => generalized-boolean
character – 文字
generalized-boolean – generalized-boolean
これらの関数は文字を比較します。
char=は、全ての文字が同じならtrueを、それ以外はfalseを返却します。
もし2つの文字の何らかの属性が違うときはchar=ではありません。
char/=は、全ての文字が違うときtrueを、それ以外はfalseを返却します。
char<は、文字が単調増加のときtrueを、それ以外はfalseを返却します。
もし2つの文字の属性が等しいとき、
char<の順序は文字コードを数値として<で比較したものと同じです。
char>は、文字が単調減少の場合はtrueを、それ以外はfalseを返却します。
もし2つの文字の属性が等しいとき、
char>の順序は文字コードを数値として>で比較したものと同じです。
char<=は、文字が単調非減少のときtrueを、それ以外はfalseを返却します。
もし2つの文字の属性が等しいとき、
char<=の順序は文字コードを数値として<=で比較したものと同じです。
char>=は、文字が単調非増加の場合はtrueを、それ以外はfalseを返却します。
もし2つの文字の属性が等しいとき、
char>=の順序は文字コードを数値として>=で比較したものと同じです。
char-equal, char-not-equal,
char-lessp, char-greaterp,
char-not-greaterp, char-not-lesspは、
順にchar=, char/=, char<, char>,
char<=, char>=と似ていますが、
大文字小文字を無視します。
もし文字が単純ではない場合(文字の属性がある場合。13.1.3. 文字の属性を参照)
結果は実装で定義された動作になります。
例えば、ある実装ではchar-equalなどの関数では、
属性を明確に無視するように定義しているかもしれません。
属性に何らかの効果がある場合は、
これらの比較関数の属性を定義する個所で規定しておく必要があります。
(char= #\d #\d) → true
(char= #\A #\a) → false
(char= #\d #\x) → false
(char= #\d #\D) → false
(char/= #\d #\d) → false
(char/= #\d #\x) → true
(char/= #\d #\D) → true
(char= #\d #\d #\d #\d) → true
(char/= #\d #\d #\d #\d) → false
(char= #\d #\d #\x #\d) → false
(char/= #\d #\d #\x #\d) → false
(char= #\d #\y #\x #\c) → false
(char/= #\d #\y #\x #\c) → true
(char= #\d #\c #\d) → false
(char/= #\d #\c #\d) → false
(char< #\d #\x) → true
(char<= #\d #\x) → true
(char< #\d #\d) → false
(char<= #\d #\d) → true
(char< #\a #\e #\y #\z) → true
(char<= #\a #\e #\y #\z) → true
(char< #\a #\e #\e #\y) → false
(char<= #\a #\e #\e #\y) → true
(char> #\e #\d) → true
(char>= #\e #\d) → true
(char> #\d #\c #\b #\a) → true
(char>= #\d #\c #\b #\a) → true
(char> #\d #\d #\c #\a) → false
(char>= #\d #\d #\c #\a) → true
(char> #\e #\d #\b #\c #\a) → false
(char>= #\e #\d #\b #\c #\a) → false
(char> #\z #\A) → implementation-dependent
(char> #\Z #\a) → implementation-dependent
(char-equal #\A #\a) → true
(stable-sort (list #\b #\A #\B #\a #\c #\C) #'char-lessp)
→ (#\A #\a #\b #\B #\c #\C)
(stable-sort (list #\b #\A #\B #\a #\c #\C) #'char<)
→ (#\A #\B #\C #\a #\b #\c) ;実装A
→ (#\a #\b #\c #\A #\B #\C) ;実装B
→ (#\a #\A #\b #\B #\c #\C) ;実装C
→ (#\A #\a #\B #\b #\C #\c) ;実装D
→ (#\A #\B #\a #\b #\C #\c) ;実装E
もし少なくとも1文字も与えられなかった場合は、
型program-errorのエラーが発せられます。
2.1. 文字の構文, 13.1.10. 処理系実装のスクリプトの説明
文字がコードの属性かあるいは実装定義の属性で異なる場合、
char=によって異なるものとしてみなされます。
(char= c1 c2)がtrueのときに、(eq c1 c2)がtrueである必要はありません。
eqは、char=が区別できないような2つの文字を区別できますが、
それは文字として区別しているのではなく、
低レベルの実装の特性に基づいて行われています。
もし(eq c1 c2)がtrueのときは、(char= c1 c2)もまたtrueです。
文字のeqlとequalの比較は、char=と同じ方法で行われます。
関数char-equal,
char-not-equal,
char-lessp,
char-greaterp,
char-not-greaterp,
char-not-lesspにおいて、
standard-charの大文字小文字の比較は、
暗に標準文字のA=a, B=b, ..., Z=z、
さらに、9<Aか、あるいはZ<0の
どちらかで順序付けされることを意味します。