Next: , Previous: Interrupting, Up: REPL


3.1.3 Restarting

Another way to exit a REPL is to use the restart procedure:

— procedure: restart [k]

This procedure selects and invokes a restart method. The list of restart methods is different for each REPL and for each error; in the case of an error REPL, this list is printed when the REPL is started:

          ;Unbound variable: foo
          ;To continue, call RESTART with an option number:
          ; (RESTART 3) => Specify a value to use instead of foo.
          ; (RESTART 2) => Define foo to a given value.
          ; (RESTART 1) => Return to read-eval-print level 1.
          
          2 error>
     

If the k argument is given, it must be a positive integer index into the list (in the example it must be between one and three inclusive). The integer k selects an item from the list and invokes it. If k is not given, restart prints the list and prompts for the integer index:

          2 error> (restart)
          ;Choose an option by number:
          ;  3: Specify a value to use instead of foo.
          ;  2: Define foo to a given value.
          ;  1: Return to read-eval-print level 1.
          
          Option number:
     

The simplest restart methods just perform their actions. For example:

          2 error> (restart 1)
          ;Abort!
          
          1 ]=>
     

Other methods will prompt for more input before continuing:

          2 error> (restart)
          ;Choose an option by number:
          ;  3: Specify a value to use instead of foo.
          ;  2: Define foo to a given value.
          ;  1: Return to read-eval-print level 1.
          
          Option number: 3
          
          Value to use instead of foo: '(a b)
          ;Value: (a b)
          
          1 ]=>