% Accessor GETF
Accessor GETF
getf
plist indicator &optional default => value
(setf
(getf
place indicator &optional default) new-value)
plist - プロパティリスト
place - place
、プロパティリストの値
indicator - オブジェクト
default - オブジェクト、デフォルトはnil
value - オブジェクト
new-value - オブジェクト
getf
は、plistのプロパティリストから
indicatorと同一の標識のプロパティを探し、
対応するプロパティの値を返却します。
標識に対して複数のプロパティがあるときは、
getf
は最初のプロパティを使います。
標識に対するプロパティが存在しないときは、
defaultが返却されます。
getf
のsetf
は、placeに保存されているプロパティリストに、
すでに標識が存在するときは、
新しいオブジェクトを関連付けます。
もし存在しなかったときは、新しい関連を作成します。
標識に対して複数のプロパティがあるときは、
getf
のsetf
は最初のプロパティにnew-valueを関連付けます。
getf
フォームをsetf
のplace
で使うとき、
引数defaultが通常の左から右へ評価されるルールに従って評価され、
valueは無視されます。
getf
のsetf
は、
place自身の値を書き込むのか、
placeに保存されているリスト構造のcar
とcdr
の
どの部分でも修正することが許されます。
(setq x '()) => NIL
(getf x 'prop1) => NIL
(getf x 'prop1 7) => 7
(getf x 'prop1) => NIL
(setf (getf x 'prop1) 'val1) => VAL1
(eq (getf x 'prop1) 'val1) => true
(getf x 'prop1) => VAL1
(getf x 'prop1 7) => VAL1
x => (PROP1 VAL1)
;; この例は実装による変化が許されている
(setq foo (list 'a 'b 'c 'd 'e 'f)) => (A B C D E F)
(setq bar (cddr foo)) => (C D E F)
(remf foo 'c) => true
foo => (A B E F)
bar
=> (C D E F)
OR=> (C)
OR=> (NIL)
OR=> (C NIL)
OR=> (C D)
なし。
なし。
なし。
get
,
get-properties
,
setf
,
5.1.2.2. place
としての関数呼び出しフォーム
getf
を使用した場合、
プロパティフォームの不在と
デフォルト値の区別をつけることができません。
get-properties
をご確認ください。
setf
の状況下で、
getf
のdefault引数を指定することは、
あまり興味が持たれません。
これが重要になるのは、push
やincf
のようなマクロであり、
place引数で読み込みと書き込みの両方が求められるときです
そのような文脈において、default引数は、
読み込みの状況によって供給され、
それは書き込む状況によっても同様に
構文として有効でなければなりません。
例えば下記の通り。
(let ((plist '()))
(incf (getf plist 'count 0))
plist) => (COUNT 1)