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. 横断の規則と副作用
なし。