For Development HEAD DRAFTSearch (procedure/syntax/module):

6.9 文字

Builtin Class: <char>
Reader Syntax: #\charname

[R7RS+] リテラルの文字オブジェクトを表現します。

リーダーは#\に出会うと、まず次の文字を読み込みます。それが文字 ()[]{}" \|;# のいずれかならば、その文字自身となります。 そうでなければ、単語を構成しない文字に出会うまで文字が続けて読み込まれます。 もし一文字しか読まれなければ、その文字自身となります。そうでなければ その単語が文字の名前として解釈されます。 それが有効な文字の名前でなければエラーとなります。

以下の文字の名前が認識されます。これらの文字の名前は大文字小文字を区別しません。

space

スペース (ASCII #x20)

newline, nl, lf

改行文字 (ASCII #x0a)

return, cr

復帰文字 (ASCII #x0d)

tab, ht

水平タブ (ASCII #x09)

page

フォームフィード、改ページ (ASCII #x0c)

alarm

ベル (ASCII #x07)

backspace

バックスペース (ASCII #x08)

escape, esc

エスケープ (ASCII #x1b)

delete, del

デリート (ASCII #x7f)

null

NUL文字 (ASCII #x00)

xN

N が16進表記の整数であるとき、Unicodeコードポイントが整数N であるような文字。これはR7RSの字句構文です。

uN

Nが4桁または8桁の16進数整数であるとき、UCSコードNであるような文字。 これはGaucheの古い構文です。新規のコードでは\xNを使ってください。

#\newline ⇒ #\newline ; 改行文字
#\x0a     ⇒ #\newline ; 改行文字
#\x41     ⇒ #\A       ; ASCII文字 ’A’
#\x3042   ⇒ #\あ      ; 平仮名「あ」
#\x2a6b2  ⇒ ; JISX0213 2-94-86
Function: char? obj

[R7RS base] objが文字なら#tを、そうでなければ#fを返します。

Function: char=? char1 char2 char3 …
Function: char<? char1 char2 char3 …
Function: char<=? char1 char2 char3 …
Function: char>? char1 char2 char3 …
Function: char>=? char1 char2 char3 …

[R7RS base] 文字を比較します。比較は内部の文字エンコーディングで行われます。

Function: char-ci=? char1 char2 char3 …
Function: char-ci<? char1 char2 char3 …
Function: char-ci<=? char1 char2 char3 …
Function: char-ci>? char1 char2 char3 …
Function: char-ci>=? char1 char2 char3 …

[R7RS char] 文字を、大文字小文字を区別せずに比較します。 比較はそれぞれの文字のfoldcaseの内部文字エンコーディングに基づいて行われます。 foldcaseについては下のchar-foldcaseを参照してください。

R7RSではこれらの手続きは(scheme char)ライブラリにあります。

Function: char-alphabetic? char
Function: char-numeric? char
Function: char-whitespace? char
Function: char-upper-case? char
Function: char-lower-case? char
Function: char-title-case? char

[R7RS char][SRFI-129] 文字charがそれぞれアルファベット (Unicode文字カテゴリ LuLlLtLmLoNl)、 数字 (Unicode文字カテゴリ Nd)、 空白文字 (Unicode文字カテゴリ ZsZpZl)、 大文字 (Unicode文字カテゴリ Lu)、 小文字 (Unicode文字カテゴリ Ll)の時に真の値を返します。

R7RSではchar-title-case?以外の手続きは (scheme char)ライブラリにあります。 char-title-case?はSRFI-129で定義されます。

Function: char-word-constituent? char

charがR7RSで識別子にエスケープなしで使える文字ならば#tを、 そうでなければ#fを返します。該当する文字は、ASCIIのアルファベットと数字、 拡張アルファベット! $ % & * + - . / : < = > ?  ^ _ ~、 文字カテゴリが Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pd, Pc, Po, Sc, Sm, Sk, So, Coの いずれかであるもの、および Zero width non-joiner (U+200C)とZero width joiner (U+200D)です。

Function: char-general-category char

[R6RS] 文字charのUnicode general categoryを表す、以下のシンボルのいずれかを返します。

CcOther, Control
CfOther, Format
CnOther, Not Assigned
CoOther, Private Use
CsOther, Surrogate
LlLetter, Lowercase
LmLetter, Modifier
LoLetter, Other
LtLetter, Titlecase
LuLetter, Uppercase
McMark, Spacing Combining
MeMark, Enclosing
MnMark, Nonspacing
NdNumber, Decimal Digit
NlNumber, Letter
NoNumber, Other
PcPunctuation, Connector
PdPunctuation, Dash
PePunctuation, Close
PfPunctuation, Final quote
PiPunctuation, Initial quote
PoPunctuation, Other
PsPunctuation, Open
ScSymbol, Currency
SkSymbol, Modifier
SmSymbol, Math
SoSymbol, Other
ZlSeparator, Line
ZpSeparator, Paragraph
ZsSeparator, Space
Function: char->integer char
Function: integer->char n

[R7RS base] char->integerは文字charのUnicodeコードポイント 整数値を返します。integer->charは数値nをUnicodeコードポイントとする 文字を返します。有効な文字charに対して以下の式は常に真となります。

(eq? char (integer->char (char->integer char)))

対応する文字が無い数値をinteger->charに渡した 場合の結果は不定です。

Function: char->ucs char
Function: ucs->char n

Deprecated. それぞれchar->integerおよびinteger->charと同じです。

Gaucheはかつて、utf-8以外の内部エンコーディングでもビルドすることができ、 その場合文字に対応する整数の文字コードはUnicodeコードポイントとは限りませんでした。 これらの手続きは確実にUnicode-コードポイントを扱いたい場合に使われました。

現在ではGaucheは内部エンコーディングにutf-8のみを使うので、 これらの手続きはもう必要なくなりました。

Function: char-upcase char
Function: char-downcase char
Function: char-titlecase char
Function: char-foldcase char

[R7RS char][SRFI-129] charの大文字、小文字、titlecase、foldcaseを それぞれ返します。 変換はUnicodeで定義された文字対文字のマッピングに従います。

R7RSは(scheme char)ライブラリで、char-upcasechar-downcasechar-foldcaseを定義しています。 char-titlecaseはSRFI-129で定義されます。 R6RSは全ての手続きを提供しています。

文字対文字のマッピングでは、一文字が複数文字に展開されるようなケースマッピングは 扱いません。有名な例はeszett (latin small letter sharp S, U+00df)で、 文字列のコンテキストでは二つの大文字のSへとマップされますが、 char-upcase #\ß は単に #\ß を返します。 完全なマッピングが必要なら、gauche.unicodeモジュールの string-upcase等が利用できます (フルセットの大文字小文字変換参照)。

Function: digit->integer char :optional (radix 10) (extended-range? #f)

文字charradix進数の数字を構成するのに有効な文字であれば、 対応する整数が、そうでなければ#fが返されます。

(digit->integer #\4) ⇒ 4
(digit->integer #\e 16) ⇒ 14
(digit->integer #\9 8) ⇒ #f

省略可能引数extended-range?に真の値が与えられると、 この手続きはASCIIの数字だけでなく、Ndカテゴリに属する すべての文字、例えば FULLWIDTH DIGIT ZEROからNINE (U+ff10 - U+ff19) も認識します。

R7RSにはdigit-valueという手続きが定義されていて、それは (digit->integer char 10 #t)と等価です。

Common Lispには同様の手続きがdigit-char-pというやや曖昧な名で定義されています。

Function: integer->digit integer :optional (radix 10) (basechar1 #\0) (basechar2 #\a)

digit->integerの逆です。整数integerradix進数 ひと桁で 表現するのに使われる文字を返します。integerがひと桁で表現できない数値の場合は #fが返されます。

(integer->digit 13 16) ⇒ #\d
(integer->digit 10) ⇒ #f

省略可能引数basechar1はゼロに相当する文字を指定します。 デフォルトは#\0です。ここに、例えばU+0660 (ARABIC-INDIC DIGIT ZERO) を与えれば、整数をアラビア・インド数字に変換できます。

もうひとつの省略可能引数basechar2は、10を越える整数に使う文字の起点を 指定します。デフォルトは#\aです。ここに#\Aを渡せば、 16進数表記で小文字のかわりに大文字を使うようになります。

Common Lispのdigit-charに当たります。

Function: gauche-character-encoding

Deprecated. シンボルutf-8を返します。 これは、1.0以前のGaucheのために書かれたコードの互換性のために残されています。 かつてはutf-8以外の内部エンコーディングでGaucheをコンパイルすることが可能でした。

Function: supported-character-encodings

ネイティブなマルチバイトエンコーディングスキームでサポートされている 文字エンコーディングスキームの名前を表す文字列のリストを返します。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT