GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Char_002dTables.html ・ emacs-doc.conao3.com

6.6 文字テーブル

char-tableはベクトルによく似ていますが、文字コードでインデックス付けされる点が異なります。修飾子のない有効な文字コードであれば、いずれもchar-tableのインデックスとして使用できます。他の配列と同様に、arefやasetを用いてchar-tableの要素にアクセスできます。さらに、char-tableには、特定の文字コードに関連付けられていない追加データを保持するためのエクストラスロットを設けることができます。ベクトルと同様に、char-tableは評価時に定数となり、任意の型の要素を保持できます。

各文字テーブルにはサブタイプというシンボルがあり、これには2つの役割があります:

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)はデフォルト値を返します。

関数: make-char-table subtype &optional init

サブタイプ subtype(シンボル)を持つ、新規に作成された char-table を返します。各要素は init で初期化され、デフォルトは nil です。char-table の作成後、そのサブタイプを変更することはできません。

すべての文字テーブルは、任意の有効な文字コードをインデックスとして格納できる容量を備えているため、文字テーブルの長さを指定する引数はありません。

subtype が char-table-extra-slots シンボルプロパティを持つ場合、これにより文字テーブル内の追加スロット数が指定されます。この値は 0 から 10 までの整数である必要があり、そうでない場合は make-char-table がエラーを発生させます。subtype が char-table-extra-slots シンボルプロパティを持たない場合(プロパティリスト を参照)、文字テーブルに追加スロットはありません。

関数: char-table-p object

この関数は、object が文字テーブルであれば t を、そうでなければ nil を返します。

関数: char-table-subtype char-table

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

char-table のデフォルト値にアクセスするための特別な関数はありません。その場合は char-table-range を使用してください(後述)。

関数: char-table-parent char-table

この関数は char-table の親を返します。親は常に nil または別の char-table のいずれかです。

関数: set-char-table-parent char-table new-parent

この関数は、char-table の親を new-parent に設定します。

関数: char-table-extra-slot char-table n

この関数は、char-table の追加スロット n(0始まり)の内容を返します。文字テーブルにおける追加スロットの数は、そのサブタイプによって決まります。

関数: set-char-table-extra-slot char-table n value

この関数は、char-tableの追加スロットn(0始まり)にvalueを格納します。

char-table は、単一の文字コードに対する要素値を指定できるほか、文字セット全体に対する値を指定することもできます。

関数: char-table-range char-table range

これにより、文字範囲 range に対して char-table で指定された値が返されます。range で指定可能な値は以下の通りです。

nil

デフォルト値を指します。

char

文字 char の要素を指します(char が有効な文字コードであると想定)。

(from . to)

consセルとは、包含範囲 ‘[from..to]’ に含まれるすべての文字を指します。この場合、関数は from で指定された文字の値を返します。

関数: set-char-table-range char-table range value

この関数は、文字範囲 range に対して char-table の値を設定します。range に指定可能な値は以下の通りです。

nil

デフォルト値を指します。

t

文字コードの全範囲を指す。

char

文字 char の要素を指します(char が有効な文字コードであると想定)。

(from . to)

consセルとは、包含範囲 ‘[from..to]’ に含まれるすべての文字を指します。

関数: map-char-table function char-table

この関数は、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)))