Function INTERN
intern string &optional package => symbol, status
string - 文字列
package - パッケージ指定子。デフォルトは現在のパッケージ。
symbol - シンボル
status - 次のうちのどれか、 :inherited, :external, :internal, nil
internは、packageにstringという名前のシンボルを挿入します。 もしpackageにstringという同じ名前のシンボルが すでにアクセス可能であったときは、それが返却されます。 packageにそのようなシンボルがアクセス可能になっていないときは、 新しいシンボルを指定した名前で作成し、 packageへ内部シンボルとして挿入するか、 もしpackageがKEYWORDパッケージであったときは 外部シンボルとして挿入します。 作成されたシンボルのホームパッケージはpackageになります。
internの最初の返却値symbolは 検索されたものか作成されたシンボルです。 2番目の返却値statusは次の値になります。
:internal
:external
:inherited
use-package経由で継承されているものが見つかった (これはシンボルが内部のものであることを意味します)。 nil
internの引数stringのとして与えらえれたとき、 続いてその文字列を変更しようとしたときの結果は未定義です。 (in-package "COMMON-LISP-USER") => #<PACKAGE "COMMON-LISP-USER">
(intern "Never-Before") => |Never-Before|, NIL
(intern "Never-Before") => |Never-Before|, :INTERNAL
(intern "NEVER-BEFORE" "KEYWORD") => :NEVER-BEFORE, NIL
(intern "NEVER-BEFORE" "KEYWORD") => :NEVER-BEFORE, :EXTERNALなし。
なし。
なし。
find-symbol, read, symbol, unintern, 2.3.4. トークンとしてのシンボル
internが名前の衝突チェックを行う必要はなく、 なぜなら指定した名前のシンボルがすでにアクセス可能であるときに 新しいシンボルを作成するようなことはないからです。