char-tableはベクトルによく似ていますが、文字コードでインデックス付けされる点が異なります。修飾子のない有効な文字コードであれば、いずれもchar-tableのインデックスとして使用できます。他の配列と同様に、arefやasetを用いてchar-tableの要素にアクセスできます。さらに、char-tableには、特定の文字コードに関連付けられていない追加データを保持するためのエクストラスロットを設けることができます。ベクトルと同様に、char-tableは評価時に定数となり、任意の型の要素を保持できます。
各文字テーブルにはサブタイプというシンボルがあり、これには2つの役割があります:
display-tableのchar-tableであり、構文テーブルはサブタイプがsyntax-tableのchar-tableです。サブタイプは、後述する関数char-table-subtypeを用いて照会できます。
char-table-extra-slotsシンボルプロパティ(シンボルプロパティを参照)で指定され、その値は0から10までの整数である必要があります。サブタイプにこのようなシンボルプロパティがない場合、文字テーブルに追加スロットは存在しません。
char-tableは、別のchar-tableである親を持つことができます。その場合、char-tableが特定の文字cに対してnilを指定するたびに、親で指定された値を継承します。言い換えれば、char-table自体がnilを指定している場合、(aref char-table c)はchar-tableの親の値を返します。
char-tableにはデフォルト値を設定することもできます。その場合、char-tableにnil以外の値が指定されていない限り、(aref char-table c)はデフォルト値を返します。
サブタイプ subtype(シンボル)を持つ、新規に作成された char-table を返します。各要素は
init で初期化され、デフォルトは nil
です。char-table の作成後、そのサブタイプを変更することはできません。
すべての文字テーブルは、任意の有効な文字コードをインデックスとして格納できる容量を備えているため、文字テーブルの長さを指定する引数はありません。
subtype が char-table-extra-slots
シンボルプロパティを持つ場合、これにより文字テーブル内の追加スロット数が指定されます。この値は 0 から 10
までの整数である必要があり、そうでない場合は make-char-table
がエラーを発生させます。subtype が char-table-extra-slots シンボルプロパティを持たない場合(プロパティリスト を参照)、文字テーブルに追加スロットはありません。
この関数は、object が文字テーブルであれば t
を、そうでなければ nil を返します。
この関数は、char-table のサブタイプシンボルを返します。
char-table のデフォルト値にアクセスするための特別な関数はありません。その場合は char-table-range を使用してください(後述)。
この関数は char-table の親を返します。親は常に nil または別の char-table のいずれかです。
この関数は、char-table の親を new-parent に設定します。
この関数は、char-table の追加スロット n(0始まり)の内容を返します。文字テーブルにおける追加スロットの数は、そのサブタイプによって決まります。
この関数は、char-tableの追加スロットn(0始まり)にvalueを格納します。
char-table は、単一の文字コードに対する要素値を指定できるほか、文字セット全体に対する値を指定することもできます。
これにより、文字範囲 range に対して char-table で指定された値が返されます。range で指定可能な値は以下の通りです。
nilデフォルト値を指します。
文字 char の要素を指します(char が有効な文字コードであると想定)。
(from . to)consセルとは、包含範囲 ‘[from..to]’ に含まれるすべての文字を指します。この場合、関数は from で指定された文字の値を返します。
この関数は、文字範囲 range に対して char-table の値を設定します。range に指定可能な値は以下の通りです。
nilデフォルト値を指します。
t文字コードの全範囲を指す。
文字 char の要素を指します(char が有効な文字コードであると想定)。
(from . to)consセルとは、包含範囲 ‘[from..to]’ に含まれるすべての文字を指します。
この関数は、char-table の要素のうち nil
以外の値を持つものそれぞれに対して、引数 function を呼び出します。function の呼び出しには、キーと値という2つの引数が渡されます。キーは char-table-range の range
引数となり得るもので、有効な文字か、あるいは同一の値を持つ文字範囲を指定するコンスセル (from . to) のいずれかです。値は、(char-table-range char-table key) が返すものです。
全体として、functionに渡されるキーと値のペアは、char-tableに格納されているすべての値を記述しています。
戻り値は常に nil です。map-char-table の呼び出しを有用にするには、function に副作用を持たせる必要があります。例えば、構文テーブルの要素を調べる方法は以下の通りです。
(let (accumulator)
(map-char-table
(lambda (key value)
(setq accumulator
(cons (list
(if (consp key)
(list (car key) (cdr key))
key)
value)
accumulator)))
(syntax-table))
accumulator)
⇒
(((2597602 4194303) (2)) ((2597523 2597601) (3))
... (65379 (5 . 65378)) (65378 (4 . 65379)) (65377 (1))
... (12 (0)) (11 (3)) (10 (12)) (9 (0)) ((0 8) (3)))