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を使うことを 考えてみて下さい。