common-lisp Block


Example

The special operator block allows grouping of several Lisp forms (like an implicit progn) and it also takes a name to name the block. When the forms within the block are evaluated, the special operator return-from can be used to leave the block. For instance:

(block foo
  (print 'hello)     ; evaluated
  (return-from foo)
  (print 'goodbye))  ; not evaluated
;;=> NIL

return-from can also be provided with a return value:

(block foo
  (print 'hello)     ; evaluated
  (return-from foo 42)
  (print 'goodbye))  ; not evaluated
;;=> 42

Named blocks are useful when a chunk of code has a meaningful name, or when blocks are nested. In some context, only the ability to return from a block early is important. In that case, you can use nil as the block name, and return. Return is just like return-from, except that the block name is always nil.

Note: enclosed forms are not top-level forms. That's different from progn, where the enclosed forms of a top-level progn form are still considered top-level forms.