intern
(intern string)
string を名前とするシンボルを返します(ケース変換なし)。rontolisp のシンボルは名前で比較され、独立したインターンテーブルはないため、結果はクォートされたリテラルを含め同名のどのシンボルとも eq になります。インタプリタでは名前はカレントパッケージにインターンされます(Common Lisp の *package* の意味論): アクセス可能なシンボルはそのホームの綴りを保ち、未知の名前は in-package で選択中のパッケージのシンボルになります — これにより、マクロ時の (intern (concatenate ...)) がそのファイル内のリテラルな defun と同じ関数を指せます。すでにパッケージ修飾を含む文字列 ("LIB:WIDGET") は、その文字列全体を名前とする新しいシンボルではなく、その修飾が指すシンボルを返します。そのため実行時に得られた正規の綴り — 例えば type-of がクラスから読み取る型名 — はそのまま往復します。(intern name :keyword) はキーワードを作り、(intern name package) は任意のパッケージ指定子 — キーワード、文字列、変数に保持されたパッケージ値 — を受け付けます。存在しないパッケージはエラーになります。find-symbol と同様、第 2 の値としてその名前のアクセス可能性ステータスを返します(パッケージがまだ提供していない名前では nil)。Common Lisp からの相違点: コンパイル系バックエンドではパッケージ修飾付き intern は常にシングルコロンの外部綴りを生成するため、この方法でインターンした未エクスポートのシンボルはダブルコロンのリテラルと eq になりません(関数としての呼び出しは動作します)。