prog (prog (bindings...) {tag | form}...) let と同様に変数を束縛し、本体をブロック内の tagbody として実行します。go が本体のタグ間をジャンプし、(return value) が value を返して prog を抜けます。末尾に到達すると nil を返します。 Run(prog ((n 5) (acc 1)) top (when (<= n 1) (return acc)) (setq acc (* acc n)) (setq n (- n 1)) (go top)) ; => 120