(rontolisp) docs
← マクロ

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 だからです。