キーワード記号
:foo
はキーワード記号です。
KEYWORD
インターンシップとパッケージからのエクスポート
- 常に自分自身に縛られている
使用法
キーワード記号は、次のプロパティの組み合わせが必要な場合に使用されます。
- シンボルは正しいデータ構造です
- 同じ名前のシンボルは一意である必要があります (パッケージにインターンすることにより) -> パッケージ
KEYWORD
- 別のパッケージは不要または不要 -> パッケージ
KEYWORD
- シンボルを引用する必要がないため、シンボルを書くのは簡単なはずです-
:foo
>':foo
- 異なる値を持つ変数として機能する機能は必要ありません ->それ自体に
:foo
評価され、:foo
:foo
Common Lisp では、通常、シンボルはパッケージ (一種の名前空間) に含めることができます。
bar
パッケージ内のエクスポートされていないシンボルは、foo
として記述され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 マクロで、いくつかの関数を生成します。それらの 1 つは functionMAKE-NODE
で、次のように使用できます。
(make-node :state 'open
:parent some-parent
:action an-action)
注: データがキーワードである場合もあります。たとえば、上記の形式では、状態は次のようになる場合:open
とそうでない場合がありopen
ます。
(make-node :state :open
:parent some-parent
:action an-action)