[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.6 キーワード

Builtin Class: <keyword>

キーワードは特別なシンボルの一種で、自動的にクォートされます。 名前で渡す引数(キーワード引数)や、キーワード-値のリストで広く使われて います。 CommonLisp とは異なり、キーワードとシンボルは明確に区別される型です。

キーワード引数の処理については、let-keywords マクロ (省略可能引数のパージング) を参照して下さい。

Reader syntax: :name

名前が name であるキーワードとして読み込まれます。 (先行する ':' は、キーワードの名前の一部ではないことに注意してください。)

Function: keyword? obj

obj がキーワードであれば、#t を返します。

Function: make-keyword name

名前が name であるキーワードを返します。nameには 文字列かシンボルが許されます。

 
(make-keyword "foo")  ⇒ :foo

(make-keyword 'foo)   ⇒ :foo
Function: keyword->string keyword

キーワード keyword の名前を文字列で返します。

 
(keyword->string :foo) ⇒ "foo"
Function: get-keyword key kv-list &optional fallback

キー-値のリストから値を取り出すのに便利な手続きです。 キー-値のリスト kv-list は偶数個の要素を持たなければなりません。 1つ目、3つ目、5つ目、… の要素はキーとして扱われ、 2つ目、4つ目、6つ目、… の要素は、その前の要素をキーとした値と なります。

この手続きは、キーの集合から key を探して、それが見つかれば、 対応する値を返します。 2つ以上のキーにマッチしたら、最左のものとなります。 マッチするキーがない場合、fallback が与えられていればそれを 返し、さもなければエラーを通知します。

kv-list が正しい偶数個の要素を持つリストでない場合は、エラーに なります。

キーワード-値リストの `キーワード' と、key 引数は、実際には キーワードである必要はありません。いかなる Scheme オブジェクトで あっても良いです。キーの比較は、eq? によって行われます。

この手続きは、STk から導入されました。

 
(get-keyword :y '(:x 1 :y 2 :z 3))
  ⇒ 2
(get-keyword 'z '(x 1 y 2 z 3))
  ⇒ 3

(get-keyword :t '(:x 1 :y 2 :z 3))
  ⇒ #<error>
(get-keyword :t '(:x 1 :y 2 :z 3) #f)
  ⇒ #f
Macro: get-keyword* key kv-list &optional fallback

get-keyword と同様ですが、kv-listkey を 含まない場合にのみ fallback が評価されることだけが違います。

Function: delete-keyword key kv-list
Function: delete-keyword! key kv-list

kv-list から keyeq? であるキーをもつキーと値を 削除します。

delete-keywordkv-list を変更しません。しかし、 返されたリストは共通の末尾部分を共有します。

delete-keyword! は新しくアロケートされることはありません。 そして、破壊的に kv-list を変更する可能性があります。 最初のキーがマッチした場合元のリストは変更されないこともありえますが、 返り値のリストを使わなければいけません。

key にマッチするキーがない場合 kv-list が返ります。

 
(delete-keyword :y '(:x 1 :y 2 :z 3 :y 4))
 ⇒ (:x 1 :z 3)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated by Shiro Kawai on November, 22 2009 using texi2html 1.78.