Special-Operator GO

UP


Special-Operator GO

Special Operator GO

構文

go tag =>|

引数と戻り値

tag - goのタグ

定義

goは、tagbodyフォームによって囲まれたボディ部にある tageqlで一致するタグによってラベル付けされている場所に 制御を移します。 もしボディ部にそのようなtagが存在しないときは、 レキシカルに含まれるtagbodyフォームがもしあるなら、 同じように検査されます。 いくつかのタグがtageqlで一致するときは、 goが含まれる場所から、 一致するtagを含んだもっとも内側のtagbodyフォームの いずれかに制御が移されます。 goの場所からレキシカルに見ることができるtagが 存在しないときの結果は未定義です。

goによって開始される制御の遷移の実行についての説明は、 5.2. 終了地点への制御の遷移をご確認ください。

例文

(tagbody
  (setq val 2)
  (go lp)
  (incf val 3)
  lp (incf val 4)) =>  NIL
val =>  6 

下記の例は、goが実行される前に tagbodyが通常の終了を行っているためエラーです。

(let ((a nil)) 
  (tagbody t (setq a #'(lambda () (go t))))
  (funcall a))

下記の例は、goが実行される前に tagbodyが上を通過しているためエラーです。

(funcall (block nil
           (tagbody a (return #'(lambda () (go a))))))

影響

なし。

例外

なし。

参考

tagbody

備考

なし。


TOP, Github