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