symbolは、いつでも唯一であることが保証され、パッケージに収容される。
1つのパッケージのなかに、その他の
symbolとしておなじprint-nameを持っていることはあるが、symbol自体がコピーされることはない。
symbolがリーダに読まれるとき、symbolオブジェクトは、自動的に生成され、
1つのパッケージに収容される。
そのパッケージは、パッケージ名にコロン(:)を付け加えた接頭語によって
記すことができる。
そのようなパッケージ接頭語がないならば、symbolはlisp:*package*
の値にある主なパッケージに収容される。
全てのsymbolは、1つのホームパッケージを持っている。
もしsymbolがそのようなホームパッケージを持っていないならば、
収容されていないsymbolと言われる。
収容されていないsymbolは、gensymやmake-symbol関数によって
作ることができ、表示のときは、"#:"接頭語がつけられる。
これらのsymbolは収容されていないので、そのような2つのsymbolが同じ
print-nameを持っていた場合、等しいことが保証されない。
ふつう、lispリーダがsymbolに出会ったとき、リーダは自動的に
symbolのprint-name文字列を大文字に変換する。
したがって、例えば(symbol-name 'car)と入力したとすると、
EusLispは、"car"の代りに"CAR"と答える。
(make-symbol "car")は、carやCARの代りにcar
を返す。
もし、小文字から構成されるsymbolをリーダに作らせたい場合、
やのようなエスケープを用いること。
symbolp object [関数]
-
- objectが
クラスsymbolかそのサブクラスのインスタンスであったならば、Tを返す。
symbol-value symbol [関数]
-
-
symbolの特殊値を得る。ローカル変数値は、この関数では取り出す
ことはできない。
symbol-function symbol [関数]
-
-
symbolのグローバル関数定義を得る。
ローカル関数は、この関数で得られない。
symbol-package sym [関数]
-
-
symが収容されているパッケージを返す。
symbol-name sym [関数]
-
-
symのprint-nameを返す。
symbol-nameは、stringがコピーするのに反して、
pname文字列をコピーしない。
したがって、もしsymbol-nameで返された文字列を変えるならば
symbolは普通の内部手続きを通してアクセス不可能となる。
symbol-plist sym [関数]
-
-
symのproperty-list(plist)を返す。
EusLispのplistは、関連リスト(association-list)と同じ様な書式を与える。
それは、属性名とその値の組を点でつないだ構成である。
これは、Common Lispの定義が要求するplist(属性名と値の線形リスト)
と非互換である。
EusLispにおいて、plistはsymbolに独特なものではない。
propertied-objectを継承するクラスから派生したどんなオブジェクトも、
property-listを持つことができる。
propertied-objectの中のこれらのplistを設定したり、取りだしたりするために、
propertied-object-plistマクロは、symbol-plistの代りに
使用されるべきである。
しかしながら、getとputpropはどのオブジェクトにも働く。
boundp symbol [関数]
-
-
symbolがグローバルな値を持っているかどうかを検査する。
注意:ローカル変数やオブジェクト変数として使用されるsymbolは
いつも値を持っているため、boundpはこれらのローカル変数の
格納状態を検査することができない。
fboundp symbol [関数]
-
-
symbolがグローバルな関数定義を持っているかどうかを検査する。
makunbound symbol [関数]
-
-
symbolは、(特殊値を持たないように)強制的にunboundされる。
ローカル変数は、いつも値が割り当てられ、makunboundできない。
get sym attribute [関数]
-
-
symのplistの中でattributeに関連する値を取り出す。
(cdr (assoc attribute (symbol-plist sym)))と等価である。
putprop sym val attribute [関数]
-
-
putpropは、setfとgetの組み合せで置き換えるべきである。
remprop sym attr [関数]
-
-
属性値(attr)とsymの組をproperty-listから削除する。
setq {var value}* [特殊]
-
-
valueをvarに割り当てる。varは、symbolか点で継った組である。
varは、ローカル変数・オブジェクト変数・特殊変数の順番にその名前の中から探される。
ただし、明確にspecialと宣言されてないものに限る。
set sym val [関数]
-
-
valをsymの特殊値として割り当てる。
setは、ローカル変数やオブジェクト変数に値を
割当てることはできない。
defun symbol [documentation] lambda-list . body [特殊]
-
-
symbolにグローバル関数を定義する。
ローカル関数を定義するためには、fletかlabelsを使用すること。
もし、documentationが与えられない場合、lambda-listに書かれている
デフォルトのdocumentation文字列が入力される。
defmacro symbol [documentation] lambda-list . body [特殊]
-
-
グローバルマクロを定義する。
EusLispは、ローカルスコープマクロ定義の機能を持っていない。
defvar var &optional (init nil) doc [マクロ]
-
-
もしvarが特殊値を持っていれば、defvar は何もしない。
もしvarがunboundならば、specialとして宣言し、
initをその値として設定する。
defparameter var init &optional doc [マクロ]
-
-
defparameterは、varをspecialとして宣言し、
varが既に値を持っていたとしても、initをその値として設定する。
defconstant sym val &optional doc [マクロ]
-
-
defconstantは、valをsymの特殊値として設定する。
defvar, defparameterやsetqと違い、その値は
defconstantでのみ設定され、これらの書式で変更することができない。
もし定数symbolの値が、変更されようとしたならば、
エラーが返される。
しかし、defconstantは以前の
定数値に上書きでき、上書きした場合は注意メッセージが出力される。
keywordp obj [関数]
-
-
もしobjがsymbolで、そのホームパッケージがKEYWORDのときTを返す。
constantp symbol [関数]
-
-
もしsymbolがdefconstantマクロで定数に宣言されているときTを返す。
documentation sym &optional type [関数]
-
-
symのために提示文字列(documentation string)を取り出す。
gensym &optional x [関数]
-
-
g001のような前置文字列と付属数字を組み合わせた新しい収容されていないsymbolを作る。
収容されてないsymbolは、symbolに関連するパッケージがないため、パッケージ前置詞
の部分に#:を示す。#:が前につくsymbolは、読めないsymbolで、
リーダではこれらのsymbolへの参照を作成することができない。
xは、整数か文字列が可能で、
接頭(prefix)インデックスか接尾(suffix)値として使用される。
gentemp &optional (prefix "T") (pkg *package*) [関数]
-
-
pkgに収容される新しいsymbolを作る。
ほとんどのアプリケーションにおいて、gensymがgentempよりも好まれる。
なぜなら、収容されないsymbolの方が高速に作ることができ、
ガーベージコレクトも可能であるため。
2016-04-05