ToC DocOverview CGDoc RelNotes Index PermutedIndex
Allegro CL
Home Previous Up Next Table of Contents Index
  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.

Home Previous Up Next Table of Contents Index
© Franz Inc. 1998-2019 - File last updated 02-07-2019