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