do-symbols
(do-symbols (var [package [result]]) body...)
package (省略時はカレントパッケージ) でアクセス可能なシンボルごとに var を
そのシンボルに束縛して本体を評価し、その後 var を nil に束縛して result を評価し
その値を返します (result フォームが無ければ nil)。アクセス可能とは、そのパッケージが
所有するシンボル (内部・外部を問わず) に加え、use リスト経由で継承しているエクスポート
済みシンボルのことです。それぞれは所有元パッケージの綴りで表されるため、cl を use する
パッケージでは裸の cl 名が得られます。シンボルはソート順で渡されますが、その順序は各シンボルの所有元を含む綴りに対する
ソートです。そのため継承した名前は、ローカルな名前と裸の名前で混ざるのではなく、
由来するパッケージのもとにまとまって並びます。
これは全 backend で動作するオペレータです。インタプリタは live
レジストリを読み、コンパイル済みバックエンドは compile 時に焼き込んだパッケージテーブル
(および make-package
で実行時に作成したパッケージ)から答えます。本体の return
は全体を抜けます -- 反復マクロが持つ暗黙の nil ブロックが確立されるためです --
result フォームは飛ばされます。
この例は組み込みパッケージを走査せず自前のパッケージを作ります。訪問する集合全体が
ページ上に見えるようにするためです。ASHARED と ZSHARED に到達するのは ds-demo が
ds-base を use しているからで、これはまさに
do-external-symbols が除外するものです。これらが先頭に
来るのは、ソートの対象が ashared ではなく ds-base:ashared だからです。