Special-Operator BLOCK

UP


Special-Operator BLOCK

Special Operator BLOCK

構文

block name form* => result*

引数と戻り値

name - シンボル
form - フォーム
result - もし通常の返却の場合はフォームの値が返却値が、 明示的な返却(return-fromによるもの)の場合はその値が渡されます。

定義

blockは、nameというblockが確立され、 そのあと暗黙のprognとしてformが評価されます。

特殊オペレーターのblockreturn-fromは一緒に動作し、 構造的で、レキシカルで、非局所的な退出機能を提供します。

レキシカルに囲まれたformの任意の場所で、 return-fromの引数にnameを与えることで blockのフォームから制御と値を返却することができます。 ただし、同じ名前のblockがはさまって確立しているときは、 外側のblockは内側のものに隠蔽されます。

blockの名前は、レキシカルスコープと動的エクステントを持ちます。

いったん確立すれば、blockは通常の返却か、明示的な返却の どちらかひとつで終了するでしょう。

例文

(block empty) =>  NIL
(block whocares (values 1 2) (values 3 4)) =>  3, 4
(let ((x 1)) 
  (block stop (setq x 2) (return-from stop) (setq x 3))
  x) =>  2
(block early (return-from early (values 1 2)) (values 3 4)) =>  1, 2
(block outer (block inner (return-from outer 1)) 2) =>  1
(block twin (block twin (return-from twin 1)) 2) =>  2
;; Contrast behavior of this example with corresponding example of CATCH.
(block b
  (flet ((b1 () (return-from b 1)))
    (block b (b1) (print 'unreachable))
    2)) =>  1

影響

なし。

例外

なし。

参考

return, return-from, 3.1. 評価

備考

なし。


TOP, Github