Next: Bool-Vectors, Previous: Vector Functions, Up: Sequences Arrays Vectors [Contents][Index]
文字テーブル(char-table)はベクターとよく似ていますが、文字テーブルは文字コードによりインデックスづけされます。文字テーブルのインデックスには、修飾キーをともなわない任意の有効な文字コードを使用できます。他の配列と同様に、aref
とaset
で、文字テーブルの要素にアクセスできます。加えて、文字テーブルは、追加のデータを保持するために、特定の文字コードに関連づけられていない、エキストラスロット(extra
slots)をもつことができます。ベクターと同様、文字テーブルは、定数として評価され、任意の型の要素を保持できます。
文字テーブルはそれぞれサブタイプ(subtype)をもち、これは2つの目的を担うシンボルです:
display-table
の文字テーブルであり、構文テーブル(syntax
tables)は、サブタイプがsyntax-table
の文字テーブルです。以下で説明するように、関数char-table-subtype
を使用して、サブタイプを問い合わせることができます。
char-table-extra-slots
シンボルプロパティー(Symbol Propertiesを参照してください)により指定され、値は0から10の整数です。サブタイプにそのようなシンボルプロパティーがない場合、その文字テーブルはエキストラスロットをもちません。
文字テーブルは親(parent)をもつことができ、これは他の文字テーブルです。文字テーブルが親をもつ場合、その文字テーブルで特定の文字cにたいしてnil
が指定されているときは、親として指定された文字テーブルで指定された値を継承します。言い方を変えると、文字テーブルchar-tableでcにnil
が指定されている場合、(aref
char-table c)
はchar-tableの親の値をreturnします。
文字テーブルはデフォルト値(default
value)をもつこともできます。デフォルト値をもつとき、文字テーブルchar-tableがcにたいしてnil
値を指定すると、(aref
char-table c)
はデフォルト値をreturnします。
サブタイプsubtype(シンボル)をもつ、新たに作成された文字テーブルをreturnします。各要素はinitに初期化され、デフォルトはnil
です。文字テーブルが作成された後で、文字テーブルのサブタイプを変更することはできません。
すべての文字テーブルは、インデックスとなる任意の有効な文字テーブルのための空間をもつので、文字テーブルの長さを指定する引数はありません。
subtypeがchar-table-extra-slots
シンボルプロパティーをもつ場合、それはその文字列テーブル内のエキストラスロットの数を指定します。値には0から10の整数を指定し、これ以外の場合make-char-table
はエラーとなります。subtypeがchar-table-extra-slots
シンボルプロパティー(Property Listsを参照してください)をもたない場合、その文字テーブルはエキストラスロットをもちません。
この関数は、objectが文字テーブルの場合はt
、それ以外はnil
をreturnします。
この関数は、char-tableのサブタイプのシンボルをreturnします。
文字テーブルのデフォルト値にアクセスするための、特別な関数は存在しません。これを行なうには、char-table-range
を使用します(以下参照)。
この関数は、char-tableの親をreturnします。親は常に、nil
、または他の文字テーブルです。
この関数は、char-tableの親を、new-parentにセットします。
このガン数は、char-tableのエキストラスロットnの内容をreturnします。文字テーブルのエキストラスロットの数は、文字テーブルのサブタイプにより決定されます。
この関数は、char-tableのエキストラスロットnに、valueを格納します。
文字テーブルは、1つの文字コードにたいして、1つの要素値(element value)を指定できます。文字テーブルは文字セット全体にたいして値を指定することもできます。
この関数は、文字範囲rangeにたいして、char-tableで指定された値をreturnします。可能なrangeは以下のとおりです:
nil
デフォルト値への参照。
文字charにたいする要素への参照(charは有効な文字コードであると仮定)。
(from . to)
包括的な範囲‘[from..to]’内のすべての文字を参照するコンスセル。
この関数は、char-table内の文字範囲rangeにたいして値をセットします。可能なrangeは、以下のとおりです:
nil
デフォルト値への参照。
t
文字コード範囲の全体を参照。
文字charにたいする要素への参照(charは有効な文字コードであると仮定)。
(from . to)
包括的な範囲‘[from..to]’内のすべての文字を参照するコンスセル。
この関数は、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)))