#### 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 ]=>