Next: , Previous: , Up: シンボル   [Contents][Index]


7.1 属性リスト

これらの関数は、シンボルに付けられた属性に作用するように、標準Emacs Lisp関数getputを増加させる。特定のシンボルに 付けられていない、ファーストクラスデータ構造としての属性リストに 作用する関数もある。

Function: get* symbol property &optional default

この関数はgetに似ているが、属性がみつからない場合、 default引数が戻り値を提供する点が異なる(Emacs Lispのgetは 常にnilを既定として使う; このパッケージのget*はCommon Lispのgetと同等である)。

get*関数はsetf可能である; このように使われる場合、 default引数は許されるが無視される。

Function: remprop symbol property

この関数は、symbolの属性リストから、propertyのための エントリを取り除く。属性が実際に見つかって取り除かれた場合は真の値を 戻し、そのような属性がない場合はnilを戻す(この関数は、 getdefaultを許さなかったので、属性が 見つからないこととその値がnilである属性を区別することが 難しかったために、おそらく元のEmacsから省略されたのだろう; したがって、属性をnilへ設定することは、ほとんどの用途で rempropと十分に近かった)。

Function: getf place property &optional default

この関数は、リストplaceを属性リスト、すなわち属性名と値の 交替するリストであるかのように走査する。propertyeq であるplaceの偶数番目の要素が見つかった場合、続く奇数番目の 要素が戻される。さもなければ、default(既定が与えられていない 場合はnil)が戻される。

特に、

(get sym prop)  ≡  (getf (symbol-plist sym) prop)

getfsetf場所として使うことは正しい。その場合、 place引数はそれ自身正しいsetf場所でなければならない。 default引数は、もしあれば、このコンテキストでは無視される。その 効果は、propertyに対応するリスト中の値セルを(setcar によって)変えるか、属性がまだ存在しない場合は、新しい属性と値の対を リスト上にコンスする。

(put sym prop val)  ≡  (setf (getf (symbol-plist sym) prop) val)

getget*関数もまたsetf可能である。default が無視されるという事実はときには有用になり得る:

(incf (get* 'foo 'usage-count 0))

ここでは、シンボルfoousage-count属性が、存在する場合は 1だけ増やされ、そうでなければ1(1だけ増やされた0)が設定される。

setfフォームとして使われない場合、getfは単に正規の関数で あり、そのplace引数は実際にどんなLisp式であってもよい。

Special Form: remf place property

このマクロは、placeに格納された属性リストから、propertyの 属性と値の対を取り除く。placeは任意のsetf可能な場所の 式である。属性が見つかった場合は真を戻す。propertyがたまたま リストの先頭の場合、実際に(setf place (cddr place)) を行なうが、もっと後で生じた場合は、属性と値のセルをつなぐために単に setcdrを使うことに注意せよ。