ToC | DocOverview | CGDoc | RelNotes | Index | PermutedIndex
| Allegro CL

| ANSI Common Lisp 5 Data and Control Flow 5.3 Dictionary of Data and Control Flow
5.3.25 return-from | Special Operator
  Syntax: return-from name [result] | Arguments and Values: name - a block tag; not evaluated. result - a form; evaluated. The default is nil. Description: Returns control and multiple values2 from a lexically enclosing block. A block form named name must lexically enclose the occurrence of return-from; any values yielded by the evaluation of result are immediately returned from the innermost such lexically enclosing block. The transfer of control initiated by return-from is performed as described in Section 5.2 Transfer of Control to an Exit Point. Examples:
       (block alpha (return-from alpha) 1)   NIL
       (block alpha (return-from alpha 1) 2)  1
       (block alpha (return-from alpha (values 1 2)) 3)  1, 2
       (let ((a 0))
          (dotimes (i 10) (incf a) (when (oddp i) (return)))
          a)  2
       (defun temp (x)
          (if x (return-from temp '))
          44)   TEMP
       (temp nil)  44
       (temp t)   DUMMY
       (block out
         (flet ((exit (n) (return-from out n)))
           (block out (exit 1)))
         2)  1
       (block nil
         (unwind-protect (return-from nil 1)
           (return-from nil 2)))
       2
       (dolist (flag '(nil t))
         (block nil
           (let ((x 5))
             (declare (special x))
             (unwind-protect (return-from nil)
               (print x))))
         (print 'here))
      5
       HERE
      5
       HERE
        NIL
       (dolist (flag '(nil t))
         (block nil
           (let ((x 5))
             (declare (special x))
             (unwind-protect
                 (if flag (return-from nil))
               (print x))))
         (print 'here))
      5
       HERE
      5
       HERE
        NIL
  The following has undefined consequences because the block form exits normally before the return-from form is attempted.
       (funcall (block nil #'(lambda () (return-from nil)))) is an error.
See Also: block, return, Section 3.1 Evaluation Allegro CL Implementation Details: None.

© Franz Inc. All Rights Reserved - File last updated 2022-07-25