次: Bool-Vectors, 前: Vector Functions, 上: Sequences Arrays Vectors
文字テーブルはベクトルによく似ていますが、
文字コードで添字付けする点が異なります。
修飾子を伴わない任意の正当な文字コードは、文字テーブルの添字に使えます。
文字テーブルの要素は、任意の配列のように、aref
やaset
で
参照できます。
さらに、文字テーブルでは、
特定の文字コードには対応しない追加データを保持するための追加スロットを
保持できます。
評価時には、文字テーブルは定数です。
各文字テーブルには、シンボルであるサブタイプ(subtype)があります。
サブタイプには2つの目的があります。
異なる使い方をする文字テーブルを区別するためと、
追加スロットの個数を制御するためです。
たとえば、表示テーブルはサブタイプがdisplay-table
である
文字テーブルであり、
構文テーブルはサブタイプがsyntax-table
である文字テーブルです。
正当なサブタイプには、char-table-extra-slots
属性があるはずで、
その値は0から10までの整数です。
この整数が文字テーブルの追加スロットの個数を指定します。
文字テーブルは、別の文字テーブルである親を持てます。
その場合、特定の文字cに対する文字テーブルの指定がnil
のときには、
親において指定された値を継承します。
いいかえれば、char-table自体にnil
を指定してあると、
(aref
char-table c)
は、
char-tableの親の値を返します。
文字テーブルは、デフォルト値も持てます。
その場合、文字テーブルが指定する値がnil
であると、
(aref
char-table c)
はデフォルト値を返します。
サブタイプがsubtypeである新たに作成した文字テーブルを返す。 各要素をinitで初期化する。 なお、initのデフォルトは
nil
である。 文字テーブル作成後には、文字テーブルのサブタイプは変更できない。文字テーブルの長さを指定する引数はない。 なぜなら、すべての文字テーブルでは、 任意の正当な文字コードを添字として使えるからである。
この関数はchar-tableのデフォルト値をnew-defaultにする。
文字テーブルのデフォルト値を参照するための特別な関数はない。 それには
(char-table-range
char-tablenil)
を使う。
この関数はchar-tableの追加スロットnの内容を返す。 文字テーブル内の追加スロットの個数はそのサブタイプで決まる。
文字テーブルでは、1つの文字コードに対して1つの要素値を指定できます。 また、文字集合全体に対して1つの値を指定することもできます。
これは、char-tableにおいて文字範囲rangeに指定されている値を返す。 rangeとして可能なものは以下のとおり。
nil
- デフォルト値を指す。
- char
- (charが正当な文字コードであると仮定して) 文字charに対する要素を指す。
- charset
- 文字集合charset全体に対して指定してある値を指す (see Character Sets)。
- generic-char
- 文字集合に対する汎用文字を表す。 引数として汎用文字を指定することは、文字集合名を指定することと同値。 汎用文字の説明は、see Splitting Characters。
この関数は文字範囲rangeに対するchar-tableの値を設定する。 rangeとして可能なものは以下のとおり。
nil
- デフォルト値を指す。
t
- 文字コードの範囲全体を指す。
- char
- (charが正当な文字コードであると仮定して) 文字charに対する要素を指す。
- charset
- 文字集合charset全体に対して指定してある値を指す (see Character Sets)。
- generic-char
- 文字集合に対する汎用文字を表す。 引数として汎用文字を指定することは、文字集合名を指定することと同値。 汎用文字の説明は、see Splitting Characters。
この関数は、char-tableの各要素についてfunctionを呼び出す。 functionをキーと値の2つの引数で呼び出す。 キーは
char-table-range
に対する可能なrange引数であり、 正当な文字か汎用文字である。 値は(char-table-range
char-table key)
である。全体として、functionに渡すキー・値の対は、 char-tableに格納されたすべての値を表す。
戻り値はつねに
nil
である。 この関数が有用であるようにするには、 functionには副作用があるべきである。 たとえば、つぎは構文テーブルの各要素の調べ方である。(let (accumulator) (map-char-table #'(lambda (key value) (setq accumulator (cons (list key value) accumulator))) (syntax-table)) accumulator) => ((475008 nil) (474880 nil) (474752 nil) (474624 nil) ... (5 (3)) (4 (3)) (3 (3)) (2 (3)) (1 (3)) (0 (3)))