R6RS:翻訳:R6RS:11.11 Characters

R6RS:翻訳:R6RS:11.11 Characters

11.11 文字

文字は Unicode のスカラー値を表現するオブジェクトである。

: Unicode では最新版の標準では(0 ~ #x10FFFF から、 #xD800 ~ #xDFFF までを除いた範囲の整数の)スカラー値の並びと人間の読める「文字」の間に対応関係を定義している。さらに詳しく言うと、 Unicode では字形と文字を区別している。字形は人間が読むために表示されるものであり、文字は字形に写像される抽象的な実体である(時には周囲にある文字の影響を受けることもある)。さらに、異なるスカラー値の並びが同一の文字に対応することがある。スカラー値と文字と字形の関係は微妙で複雑なのである。

このような複雑さを覗けば、読み書きのできる人間のほとんどが「文字」と読んでいるであろうものは単一の Unicode のスカラー値で表現できる(だがこの場合も、複数の Unicode のスカラー値の並びが同一の文字を表すこともある)。こういった分類をされるものには、例えば、ローマ字、キリル文字、ヘブライ文字の子音、そして漢字のほとんどがある。

Unicode では #xD800 から #xDFFF は、その範囲は Unicode のコードポイントの一部であるが、スカラー値の範囲から除外している。ただし、この範囲の Unicode コードポイントはいわゆるサロゲートであり、 UTF-16 エンコーディングの構造物であり、特定の Unicode エンコーディングのなかにだけ現れる可能性があり、そしてその場合にもペアになった場合にだけスカラー値をコード化する。したあって、文字はすべてコードポイントを表現するが、サロゲートコードポイントは文字としての表現を持たない。

[procedure] (char? obj)

obj が文字であれば #t を返し、そうでなければ #f を返す。

[procedure] (char->integer char)

[procedure] (integer->char sv)

sv は Unicode のスカラー値でなければならない。すなわち、非負の正確な整数オブジェクトで [0, #xD7FF] ∪ [#xE000, #x10FFFF] の範囲になければならない。

文字が与えられた場合、 char->integer はその Unicode スカラー値を正確な整数オブジェクトとして返す。 Unicode のスカラー値 sv について、 integer->char はそれに対応する文字を返す。

(integer->char 32)         ⇒ #\space
(char->integer (integer->char 5000))
        ⇒ 5000
(integer->char #\xD800)   &assertion exception

[procedure] (char=? char1 char2 char3 ...)

[procedure] (char<? char1 char2 char3 ...)

[procedure] (char>? char1 char2 char3 ...)

[procedure] (char<=? char1 char2 char3 ...)

[procedure] (char>=? char1 char2 char3 ...)

これらの手続きは文字集合に対してその Unicode スカラー値にしたがって全順序を定義する。

(char<? #\z #\ß)         ⇒ #t
(char<? #\z #\Z)         ⇒ #f

Last modified : 2008/03/31 09:15:50 UTC