npt-japanese

% Accessor GETF

UP


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が返却されます。

getfsetfは、placeに保存されているプロパティリストに、 すでに標識が存在するときは、 新しいオブジェクトを関連付けます。 もし存在しなかったときは、新しい関連を作成します。 標識に対して複数のプロパティがあるときは、 getfsetfは最初のプロパティにnew-valueを関連付けます。 getfフォームをsetfplaceで使うとき、 引数defaultが通常の左から右へ評価されるルールに従って評価され、 valueは無視されます。

getfsetfは、 place自身の値を書き込むのか、 placeに保存されているリスト構造のcarcdrの どの部分でも修正することが許されます。

Examples:

(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の状況下で、 getfdefault引数を指定することは、 あまり興味が持たれません。 これが重要になるのは、pushincfのようなマクロであり、 place引数で読み込みと書き込みの両方が求められるときです そのような文脈において、default引数は、 読み込みの状況によって供給され、 それは書き込む状況によっても同様に 構文として有効でなければなりません。 例えば下記の通り。

(let ((plist '()))
  (incf (getf plist 'count 0))
  plist) =>  (COUNT 1)

TOP, Github