Variable *FEATURES*
通常のリスト
実装依存
*features*の値は、featuresリストと呼ばれます。 これはシンボルのリストであり、featuresと呼ばれ、 実装や環境のいくつかの状況に対応しています。
多くのfeaturesが実装依存の意味を持っています。 下記の示すものは割り当てられたfeatureの名前です。
:cltl1
LISPというパッケージが 1984年に制定されたCommon Lisp: The Languageに 適合していることを示します。 このfeatureをもつ適合する実装は、 仕様に指定されたシンボルをLISPパッケージではなく COMMON-LISPパッケージ内にすることができますが、 しかし必須ではありません。:cltl2
Common Lisp: The Language, Second Editionに 適合していることを示します。 このfeatureは、どのような適合する実装にも存在してはいけません。 なぜならそのドキュメントへの適合性はこの仕様の適合性と互換性がないからです。 しかし、この名前はこの仕様書によって、 プログラムがそのドキュメントの適合によって実装されたものと またこの仕様書の適合によって実装されたものとの 区別をする助けのために予約されています。:ieee-floating-point
IEEE Standard for Binary Floating-Point Arithmeticの要求に 適合していることを示します。:x3j13
featureが含まれている部分があると信じられることを示します。 適合した実装は、このようなfeatureを含むかもしれないし含まないかもしれません (このfeatureは、時期尚早に:draft-ansi-clや:ansi-clを導入しないように、 ドラフト版の標準を利用可能にするための 一時しのぎであることを主な目的としています)。:draft-ansi-cl
:draft-ansi-clのfeatureが含まれているときは、 :draft-ansi-cl-2か:ansi-clのfeature持つことは許されていません。 なぜなら最初のドラフトと続くものは互換性が無い変更があるためです。:draft-ansi-cl-2
ansi-clのfeatureを持っているものについて、 もし最終的に承認された標準が ドラフト版の標準と非互換性ではないときに、 だた:draft-ansi-clのfeatureのみを保持することが許されます。:ansi-cl
:common-lisp
featureは、 :x3j13, :draft-ansi-cl, :ansi-clのfeatureを ひとつ以上保有するような実装においては *features*に現れなければなりません。 これは:cltl1か:cltl2のfeatureを持つような実装についても また現れなければいけませんが、 しかし本仕様書はそのようなふるまいを強制できません。 このfeatureは「Common Lisp」という名前のファミリーの言語と、 そうではなくそのファミリー内の何らかの仕様書における方言と区別するための 同一性を持たせるという意味を持っています。なし。
なし。
1.5.2.1.1. リアルタイムコンディションの使用, 2.4. 標準マクロ文字
*features*の値は、リーダー構文の#+と#-によって使用されます。
featuresリスト内のシンボルは、 どのようなパッケージにもなれますが、 実際にはそれらは一般的にKEYWORDパッケージになります。 これは、 feature式を読み込むリーダーマクロの#+と#-が 標準でKEYWORDパッケージを使用するためです。 featureの名前をパッケージP(KEYWORDではなく)で 使用する必要があるコードは、 Pへのパッケージ前置詞を明に使うことで実現できますが、 そのようなコードは readでfeature式を使うために パッケージPが存在することを保証しなければならず、 ある場合においてはfeature式の読み込みが失敗するかもしれません。
一般的に特定の実装で同一性を識別できるfeatureをひとつ以上含めることが 実装にとってより良いと考えられます。 そうすることにより条件式は他とは違うある実装の特異性として区別するような 書き方ができるようになります。 featureは通常KEYWORDパッケージのシンボルであるため、 結果として衝突が起こりやすく、 また誰がどのシンボルをどのような理由で使用する権利を持っているかを決定する 一意的なメカニズムがあるわけでもないので、 保守的な戦略として 自分の会社名や製品名から派生した名前を選択することができます。