% Function REMPROP
Function REMPROP
remprop
symbol indicator => generalized-boolean
symbol - シンボル
indicator - オブジェクト
generalized-boolean - generalized-boolean
remprop
は、symbolのプロパティリストから
indicatorと同一の標識のプロパティを削除します。
標識に対してキーが同一のプロパティが複数あるときは、
remprop
は最初のプロパティを削除します。
標識に対するプロパティが存在しないときはfalseを、
プロパティが見つかった時はtrueを返却します。
プロパティのindicatorと対応する値は、
プロパティリストを順不同で破壊的につなぎ合わせることにより削除します。
許容される副作用は、remf
のものに対応します。
つまり、下記のようになります。
(remprop x y) == (remf (symbol-plist x) y)
(setq test (make-symbol "PSEUDO-PI")) => #:PSEUDO-PI
(symbol-plist test) => ()
(setf (get test 'constant) t) => T
(setf (get test 'approximation) 3.14) => 3.14
(setf (get test 'error-range) 'noticeable) => NOTICEABLE
(symbol-plist test)
=> (ERROR-RANGE NOTICEABLE APPROXIMATION 3.14 CONSTANT T)
(setf (get test 'approximation) nil) => NIL
(symbol-plist test)
=> (ERROR-RANGE NOTICEABLE APPROXIMATION NIL CONSTANT T)
(get test 'approximation) => NIL
(remprop test 'approximation) => true
(get test 'approximation) => NIL
(symbol-plist test)
=> (ERROR-RANGE NOTICEABLE CONSTANT T)
(remprop test 'approximation) => NIL
(symbol-plist test)
=> (ERROR-RANGE NOTICEABLE CONSTANT T)
(remprop test 'error-range) => true
(setf (get test 'approximation) 3) => 3
(symbol-plist test)
=> (APPROXIMATION 3 CONSTANT T)
シンボルのプロパティリストは修正されます。
なし。
symbolがシンボルではないとき、
型type-error
のエラーが発生します。
remprop
はindicatorのテストに
eql
ではなくeq
を用いるため、
移植しやすいコードとして、
indicatorに数と文字を使うことは推奨されません。
そのため、そのようなindicatorを使ったときの効果は
実装依存です。
もちろん、そのようなプロパティを削除する必要がある場合は、
仕方がないことです。
プロパティに対してget
のsetf
を使うことを
考えてみて下さい。