Function COPY-SYMBOL
copy-symbol
symbol &optional copy-properties => new-symbol
symbol - シンボル
copy-properties - generalized-boolean、デフォルトはfalse
new-symbol - 新しい、unintern
なシンボル
copy-symbol
は、新しく、unintern
であり、 引数symbolの名前とstring=
で等しい名前を持つシンボルを返却します。 そのシンボル名は、引数のシンボル名と同じである可能性があります。
copy-propertiesがfalseのときは、 new-symbolは、bound
でも、fbound
でもなく、 null
のプロパティリストを持ちます。 copy-propertiesがtrueのときは、 new-symbolの初期値はsymbolの値であり、 new-symbolの関数定義の初期値はsymbolの関数の値であり、 new-symbolのプロパティリストの初期値は symbolのプロパティリストのコピーされた値です。
setq fred 'fred-smith) => FRED-SMITH
(setf (symbol-value fred) 3) => 3
(setq fred-clone-1a (copy-symbol fred nil)) => #:FRED-SMITH
(setq fred-clone-1b (copy-symbol fred nil)) => #:FRED-SMITH
(setq fred-clone-2a (copy-symbol fred t)) => #:FRED-SMITH
(setq fred-clone-2b (copy-symbol fred t)) => #:FRED-SMITH
(eq fred fred-clone-1a) => false
(eq fred-clone-1a fred-clone-1b) => false
(eq fred-clone-2a fred-clone-2b) => false
(eq fred-clone-1a fred-clone-2a) => false
(symbol-value fred) => 3
(boundp fred-clone-1a) => false
(symbol-value fred-clone-2a) => 3
(setf (symbol-value fred-clone-2a) 4) => 4
(symbol-value fred) => 3
(symbol-value fred-clone-2a) => 4
(symbol-value fred-clone-2b) => 3
(boundp fred-clone-1a) => false
(setf (symbol-function fred) #'(lambda (x) x)) => #<FUNCTION anonymous>
(fboundp fred) => true
(fboundp fred-clone-1a) => false
(fboundp fred-clone-2a) => false (
なし。
なし。
もしsymbolがシンボルではないとき、 型type-error
のエラーが発せられます。
実装者は、むやみにシンボル名の文字をコピーする必要はありません。 通常の実装においては、 new-symbolの名前と引数symbolの名前をコピーして同一にするのは、 良い方法とは言えません。