% Macro DO-SYMBOLS, DO-EXTERNAL-SYMBOLS, DO-ALL-SYMBOLS
Macro DO-SYMBOLS, DO-EXTERNAL-SYMBOLS, DO-ALL-SYMBOLS
do-symbols (var [package [result-form]]) declaration*
{tag | statement}*
=> result*
do-external-symbols (var [package [result-form]]) declaration*
{tag | statement}*
=> result*
do-all-symbols (var [result-form]) declaration*
{tag | statement}*
=> result*
var - 変数名。評価されません。
package - パッケージ指定子。評価されます。
do-symbolsとdo-external-symbolsの
デフォルトは現在のパッケージ。
result-form - フォーム。下記の説明に従って評価されます。
デフォルトはnil。
declaration - 宣言式。評価されません。
tag - goタグ。評価されません。
statement - compound-form。下記の説明に従って評価されます。
result - 通常の返却が生じたときはreturn-fromの返却値であり、
例外的な返却が生じたときは遷移が生じた値が返却されます。
do-symbols, do-external-symbols, do-all-symbolsは、
パッケージのシンボルに対して繰り返しを行います。
選択されたパッケージの集合内の各シンボルについて、
varにシンボルが束縛されて、
ボディ部のstatementが実行されます。
全てのシンボルが処理されたとき、
result-formが評価されてマクロの値として返却されます。
do-symbolsは、packageでアクセス可能な
シンボルに対して繰り返しを行います。
複数のパッケージから継承されているシンボルは、
statementが一回以上実行されるでしょう。
do-all-symbolsは、
全ての登録されているパッケージで繰り返しを行います。
do-all-symbolsは、どの登録されたパッケージに対しても
アクセス可能ではないシンボルは処理されないので、
全てのシンボルが何であれ実行するわけではありません。
do-all-symbolsは、
いくつかのパッケージに現れるシンボルは
複数回処理されるかもしれません。
do-external-symbolsは、
packageの外部シンボルに対して繰り返しを行います。
result-formが評価されるとき、
varは束縛されておりnilの値を持っています。
nilという名前の暗黙のblockが
do-symbols, do-external-symbols,
do-all-symbolsフォーム全体を囲みます。
returnかreturn-fromは
繰り返しを早期に終わらせるときに使用されます。
もしボディ部の実行が、
uninternの使用によって
varの現在の値からシンボルを取り除く以外に、
繰り返しが行われているパッケージの
集合に含まれるシンボルに影響を与えるのであれば、
その結果は未定義です。
それぞれのマクロについて、 名前が束縛されているスコープは、 初期値フォームは含まれませんが、 しかしオプションの結果のフォームは含まれます。
ボディ部のどんなtagも、tagbodyとものとして扱われます。
(make-package 'temp :use nil) => #<PACKAGE "TEMP">
(intern "SHY" 'temp) => TEMP::SHY, NIL ;SHY will be an internal symbol
;in the package TEMP
(export (intern "BOLD" 'temp) 'temp) => T ;BOLD will be external
(let ((lst ()))
(do-symbols (s (find-package 'temp)) (push s lst))
lst)
=> (TEMP::SHY TEMP:BOLD)
OR=> (TEMP:BOLD TEMP::SHY)
(let ((lst ()))
(do-external-symbols (s (find-package 'temp) lst) (push s lst))
lst)
=> (TEMP:BOLD)
(let ((lst ()))
(do-all-symbols (s lst)
(when (eq (find-package 'temp) (symbol-package s)) (push s lst)))
lst)
=> (TEMP::SHY TEMP:BOLD)
OR=> (TEMP:BOLD TEMP::SHY)
なし。
なし。
なし。
intern,
export,
3.6. 横断の規則と副作用
なし。