do*

Title
do*
Type
Macro
Arguments
do* (&rest VARLIST) (&optional END-TEST &rest RESULT) &body BODY
Package
lisp
Section
制御構造
File
evalmacs.l
doと同じようにループ処理を行う。
doとだいたい同じだけど、letとlet*の違いのように、局所変数の初期化と更
新の方法にある。doはletを使って局所変数を初期化しているため、全ての初
期値を計算してから局所変数をバインドするが,do*ではletの代わりにlet*
が使われている。またpsetqのかわりにsetqを使う。

do*式の一般形は、

(block nil
  (let* ((<変数1> <初期値1> <ステップ1>)
         (<変数2> <初期値2> <ステップ2>)
                  ...
         (<変数m> <初期値m> <ステップm>))
    (tagbody
      loop
      (when <終了条件>
        (return (progn <後式1> ... <後式p>)))
      <式1>
      ...
      <式n>
     (setq <変数1> <ステップ1>
              ...
           <変数m> <ステップm>)
      (go loop))))

と同値である。(loop というタグは他では使われていないものとする)
Seealso
do
let
let*