Next: , Previous: , Up: Sequences Arrays Vectors   [Contents][Index]


6.6 Char-Tables

文字テーブル(char-table)はベクターとよく似ていますが、文字テーブルは文字コードによりインデックスづけされます。文字テーブルのインデックスには、修飾キーをともなわない任意の有効な文字コードを使用できます。他の配列と同様に、arefasetで、文字テーブルの要素にアクセスできます。加えて、文字テーブルは、追加のデータを保持するために、特定の文字コードに関連づけられていない、エキストラスロット(extra slots)をもつことができます。ベクターと同様、文字テーブルは、定数として評価され、任意の型の要素を保持できます。

文字テーブルはそれぞれサブタイプ(subtype)をもち、これは2つの目的を担うシンボルです:

文字テーブルは親(parent)をもつことができ、これは他の文字テーブルです。文字テーブルが親をもつ場合、その文字テーブルで特定の文字cにたいしてnilが指定されているときは、親として指定された文字テーブルで指定された値を継承します。言い方を変えると、文字テーブルchar-tablecnilが指定されている場合、(aref char-table c)char-tableの親の値をreturnします。

文字テーブルはデフォルト値(default value)をもつこともできます。デフォルト値をもつとき、文字テーブルchar-tablecにたいしてnil値を指定すると、(aref char-table c)はデフォルト値をreturnします。

Function: make-char-table subtype &optional init

サブタイプsubtype(シンボル)をもつ、新たに作成された文字テーブルをreturnします。各要素はinitに初期化され、デフォルトはnilです。文字テーブルが作成された後で、文字テーブルのサブタイプを変更することはできません。

すべての文字テーブルは、インデックスとなる任意の有効な文字テーブルのための空間をもつので、文字テーブルの長さを指定する引数はありません。

subtypechar-table-extra-slotsシンボルプロパティーをもつ場合、それはその文字列テーブル内のエキストラスロットの数を指定します。値には0から10の整数を指定し、これ以外の場合make-char-tableはエラーとなります。subtypechar-table-extra-slotsシンボルプロパティー(Property Listsを参照してください)をもたない場合、その文字テーブルはエキストラスロットをもちません。

Function: char-table-p object

この関数は、objectが文字テーブルの場合はt、それ以外はnilをreturnします。

Function: char-table-subtype char-table

この関数は、char-tableのサブタイプのシンボルをreturnします。

文字テーブルのデフォルト値にアクセスするための、特別な関数は存在しません。これを行なうには、char-table-rangeを使用します(以下参照)。

Function: char-table-parent char-table

この関数は、char-tableの親をreturnします。親は常に、nil、または他の文字テーブルです。

Function: set-char-table-parent char-table new-parent

この関数は、char-tableの親を、new-parentにセットします。

Function: char-table-extra-slot char-table n

このガン数は、char-tableのエキストラスロットnの内容をreturnします。文字テーブルのエキストラスロットの数は、文字テーブルのサブタイプにより決定されます。

Function: set-char-table-extra-slot char-table n value

この関数は、char-tableのエキストラスロットnに、valueを格納します。

文字テーブルは、1つの文字コードにたいして、1つの要素値(element value)を指定できます。文字テーブルは文字セット全体にたいして値を指定することもできます。

Function: char-table-range char-table range

この関数は、文字範囲rangeにたいして、char-tableで指定された値をreturnします。可能なrangeは以下のとおりです:

nil

デフォルト値への参照。

char

文字charにたいする要素への参照(charは有効な文字コードであると仮定)。

(from . to)

包括的な範囲‘[from..to]’内のすべての文字を参照するコンスセル。

Function: set-char-table-range char-table range value

この関数は、char-table内の文字範囲rangeにたいして値をセットします。可能なrangeは、以下のとおりです:

nil

デフォルト値への参照。

t

文字コード範囲の全体を参照。

char

文字charにたいする要素への参照(charは有効な文字コードであると仮定)。

(from . to)

包括的な範囲‘[from..to]’内のすべての文字を参照するコンスセル。

Function: map-char-table function char-table

この関数は、char-tableの非nil値ではない各要素にたいして、引数functionを呼び出します。functionの呼び出しでは、2つの引数(keyとvalue)が指定されます。keyはchar-table-rangeにたいする可能なrange — 有効な文字か、同じ値を共有する文字範囲を指定するコンスセル(from . to)です。valueは、(char-table-range char-table key)がreturnする値です。

全体的に見て、functionに渡されるkey-valueのペアは、char-tableに格納されたすべての値を表します。

return値はm常に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)))