Re: Stopping a program
- To: mathgroup at smc.vnet.net
- Subject: [mg93261] Re: Stopping a program
- From: Joseph Gwinn <joegwinn at comcast.net>
- Date: Sat, 1 Nov 2008 05:11:05 -0500 (EST)
- References: <200810300700.CAA00553@smc.vnet.net> <geee6l$a8n$1@smc.vnet.net>
In article <geee6l$a8n$1 at smc.vnet.net>, Daniel Lichtblau <danl at wolfram.com> wrote: > carlos at colorado.edu wrote: > > This is a revision of a previous posting "Looking for Stop". > > Unfortunately the answers were not helpful. My fault: I didnt > > explain what I am looking for in specific terms. So here it is. > > > > Several application programs in Mathematica that I use in > > graduate courses are translations from old (1960-80s) Fortran and C > > programs. A medium-size Fortran program with, say, 10^6 statements > > contracts to about 40-100K Mathematica commands, and similarly in > > other high order languages. The reduction comes mostly from > > use of built-in functions. However, the overall hierarchical > > structure > > does not change much, e.g. the "main program" becomes a > > "Driver Script Cell" (DSC) and functions/routines become Modules. > > The typical structure is > > > > DSC: > > Preprocessing Modules (written by students) > > Processing Modules (supplied) > > Postprocessing Modules (supplied) > > > > There are typically 50-200 supplied modules, forming trees 3-6 > > levels deep, depending on application. Programs are run > > interactively by students doing homework or take-home exams. > > They write the problem-dependent preprocessing part of the DSC, > > save the NB, initialize the supplied modules (which are in > > untouchable initialization cells) and execute the DSC. > > > > Now suppose an irrecoverable error is detected in a Module four levels > > deep. In Fortran or C, I give diagnostics and call a central error > > termination routine that also displays the "call trace" kept in a > > stack. > > In Mathematica I can only say Exit[], which is a bit drastic. > > > > What I was looking for is a way to transfer to the end of the DSC > > as if the program had terminated normally. The student looks at > > the error message, fixes the preprocessing part as needed, and > > tries again. As mentioned in the OP, I thought to put a Label: > > at the end of the DSC but AFAIK Mathematica does not allow > > forward control transfers. Specific suggestions are welcome. > > Mathematica certainly supports allowing Label to syntactically follow > corresponding Goto(s) (I have used it this way). But I doubt this is > what you want because they really need to be in the same Module, With, > or Block. (Maybe they don't, but I'd not bet on them working correctly > if not). > > You almost certainly can achieve what you have in mind with Throw at the > point of error, and Catch in the DSC. That's generally how we transfer > control back to caller in error situations. Other possibilities include > using Check in your DSC, and Return at points of error. But this > involves really knowing where Return will take you and thus is not > reliable if you are neted several layers deep. I have a related problem. When I import data, things may not go well if the data is bad. I have tests for this, but have not figured out how to stop evaluation of the entire notebook, so Mathematica makes complaint after complaint, and may become quite lost. Abort has no obvious effect. Any suggestions? Thanks, Joe Gwinn