Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!burl!ulysses!bellcore!decvax!decwrl!pyramid!hplabs!hpfcdc!hpfcla!hpfcmt!chan From: chan@hpfcmt Newsgroups: net.lang Subject: Re: and if you put this in your language ... Message-ID: <9100002@hpfcmt> Date: Wed, 2-Apr-86 15:51:00 EST Article-I.D.: hpfcmt.9100002 Posted: Wed Apr 2 15:51:00 1986 Date-Received: Wed, 9-Apr-86 09:30:23 EST References: <1187@mmintl> Lines: 48 > BLOCK label_name { > ..... > } > LOOP label_name { > ..... > } > FRAGMENT label_name { > ..... > } >A FRAGMENT is essentially an internal procedure without arguments; >a BLOCK is a labelled block of code; and a LOOP is a labelled (forever) >loop. The command statement that I want is: > escape [(block/loop)_label_name] [via fragment_name] >This statement transfers control to the next statement after the >block (loop) but first executes the named fragment. If there is >no block/loop label name the escape leaves the current block/loop. >If there is no via clause control is transferred directly to the >next statement. Every once in a while I find that I would really >like to have something like this available. Common Lisp (as well as other dialects) has a capability similar to what you desire, that is CATCH and THROW, and UNWIND-PROTECT. (CATCH