MathGroup Archive 2008

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

Search the Archive

Re: Stopping a program

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

carlos at 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:

If[x>y,Abort[]]; (* Conditionally abort the program - step3 will not be 
executed *)

where the steps are whole Mathematica expressions.

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


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

  • 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