MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Stopping a program

  • To: mathgroup at smc.vnet.net
  • Subject: [mg93304] Re: Stopping a program
  • From: David Bailey <dave at Remove_Thisdbailey.co.uk>
  • Date: Mon, 3 Nov 2008 05:27:32 -0500 (EST)
  • References: <gebm16$eq$1@smc.vnet.net>

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.
> 
The crucial change that you need to make is to create one or more 
functions containing the various steps of your program. At its very 
simplest this might look like:

myfunc[]:=Module[{},
step1;
step2;
If[x>y,Abort[]]; (* Conditionally abort the program - step3 will not be 
executed *)
step3;
];

where the steps are whole Mathematica expressions.

The last cell in your notebook should start the whole thing running:

myfunc[];

If you structure things in this way, Abort[] will work as advertised, 
and you can even trap the abort at a higher level using CheckAbort.

David Bailey
http://www.dbaileyconsultancy.co.uk


  • Prev by Date: Re: Trinomial decics x^10+ax+b = 0; Help with Mathematica
  • Next by Date: FW: Re: Expressions with ellipsis (...)
  • Previous by thread: Re: Stopping a program
  • Next by thread: RE: ColorData as a Funnction of height values