レコードの目的は、プログラマがEmacsに組み込まれていない新しい型のオブジェクトを作成できるようにすることにあります。これらは、cl-defstructおよびdefclassインスタンスの基盤となる表現として利用されます。
内部的には、レコードオブジェクトはベクトルに非常によく似ており、そのスロットには aref
を用いてアクセスでき、copy-sequence
を用いてコピーすることができます。ただし、最初のスロットは type-of
によって返される型を保持するために使用されます。また、現在の実装ではレコードのスロット数は最大4096個ですが、ベクトルはそれよりもはるかに多く持つことができます。配列と同様に、レコードは0始まりのインデックスを採用しており、最初のスロットのインデックスは0となります。
型スロットには、シンボルまたは型記述子が指定される必要があります。型記述子の場合は、その型に名前を付けるシンボルが返されます;型記述子。それ以外の種類のオブジェクトは、そのまま返されます。
レコードの印刷表現は ‘#s’ で始まり、その後に内容を指定するリストが続きます。最初のリスト要素はレコード型である必要があります。続く要素はレコードスロットです。
他の型名との衝突を避けるため、新しいレコード型を定義するLispプログラムでは、通常、これらのレコード型が導入されるパッケージの命名規則を型名に採用すべきである。なお、衝突する可能性のある型名は、レコード型を定義するパッケージがロードされる時点では判明していない場合があり、将来のある時点でロードされる可能性があることに留意されたい。
レコードは評価における定数とみなされます。つまり、それを評価した結果は同じレコードになります。この際、スロットの評価や参照すら行われません。自己評価フォームを参照してください。