KEYWORD
パッケージからエクスポート:
- シンボルと同じ名前を持つ
- シンボルは(パッケージでそれらをインターンで)一意である必要があります適切なデータ構造である - パッケージ
KEYWORD
- 書き込み> - >パッケージ
KEYWORD
- 異なるパッケージが必要または望んでいたされていませんシンボルは、それらを引用する必要がないことで、簡単にする必要があります - >
:foo
':foo
- よりも優れて異なる値を持つ変数が必要とされていないとして作用する能力 - >
:foo
:foo
自体にのみ:foo
0123に評価Common Lispでは 一般記号はパッケージ(名前空間のようなもの)にすることができます。
foo
の中の記号bar
はfoo::bar
と書かれています。ダブルコロンは、パッケージ名とシンボル名の間にあります。
エクスポートされたシンボルは、その後、foo:bar
として書き込まれます。単一のコロンが使用されます。
シンボルは、パッケージなしbar
のように書かれている現在のパッケージで提供された場合。
パッケージKEYWORD
KEYWORD
と呼ばれる特別なパッケージがあります。そのパッケージ内のシンボルbar
は、単に常に:bar
と書かれています。
例
これらのキーワードのシンボルはまた、これらの興味深い性質を持っている:シンボルが自動的にパッケージKEYWORD
(そうkeyword::bar
、keyword:bar
、::bar
と:bar
がすべて同じ記号です)からエクスポートして、彼らはそれ自身に評価されています。
CL-USER 5 > :bar
:BAR
CL-USER 6 > (describe :bar)
:BAR is a SYMBOL
NAME "BAR"
VALUE :BAR
FUNCTION #<unbound function>
PLIST NIL
PACKAGE #<The KEYWORD package, 0/4 internal, 5830/8192 external>
CL-USER 7 > (eq 'keyword::bar ':bar)
T
CL-USER 8 > (eq :bar ':bar) ; quoted or unquoted, each subform evaluates to :bar
T
使用
個のキーワードシンボルが名前付き引数に名前として例えば使用されています。
(defun foo (&key bar) (+ bar 10))
(foo :bar 7)
は通常、彼らはまた、インスタンスおよび構造構築の引数に使用されています。 (defstruct node state parent action)
DEFSTRUCT
Common Lispのマクロであり、それはいくつかの機能を生成します。
(make-node :state 'open
:parent some-parent
:action an-action)
注:時々データもキーワードかもしれないそのうちの一つは、として使用することができます機能MAKE-NODE
、です。 「**エクスポートされたシンボル** ... FOO 'のように記述されています:
(make-node :state :open
:parent some-parent
:action an-action)
あなたが書く:上記のフォームでは例えば、状態は
:open
なくopen
かもしれません。bar' * 1つのコロンが使用されています* .. "と" [キーワード]シンボルは**自動的に**にエクスポートされます "しかし、あなたの例は'(eq 'keyword :: bar':bar) 'を表示します。キーワードを常にエクスポートすると、なぜダブルコロンを使用するのですか? '::'は、エクスポートされたシンボルとエクスポートされていないシンボルの両方で使用できますか? –@GlennSlaydenはい、エクスポートされた、またはエクスポートされていないすべてのインターナショナルシンボルは、package :: nameと書くことができます。エクスポートされたシンボルだけをpackage:nameとして書き込むことができます。キーワードシンボルは、名前としてのみ記述できます。 –
完全性のために、 ':: bar'はどうですか?それでも 'KEYWORD'パッケージを参照しているのですか、それとも今はグローバルの他の形式ですか? LISP初心者のために申し訳ありません。 –