restart-bind executes the body of forms 
in a dynamic environment where restarts with the given names are in effect.
If a name is nil, it indicates an anonymous restart;
if a name is a non-nil symbol, it indicates a named restart.
The function, interactive-function, and report-function
are unconditionally evaluated in the current lexical and dynamic environment
prior to evaluation of the body. Each of these forms must evaluate to
a function.
If invoke-restart is done on that restart,
the function which resulted from evaluating function 
is called, in the dynamic environment of the invoke-restart,
with the arguments given to invoke-restart. 
The function may either perform a non-local transfer of control or may return normally.
If the restart is invoked interactively from the debugger 
(using invoke-restart-interactively), 
the arguments are defaulted by calling the function 
which resulted from evaluating interactive-function.
That function may optionally prompt interactively on query I/O, 
and should return a list of arguments to be used by
invoke-restart-interactively when invoking the restart. 
If a restart is invoked interactively but no interactive-function is used,
then an argument list of nil is used. In that case, the function
must be compatible with an empty argument list.
If the restart is presented interactively (e.g.,  by the debugger),
the presentation is done by calling the function which resulted
from evaluating report-function.
This function must be a function of one argument, a stream. 
It is expected to print a description of the action that the restart takes
to that stream. 
This function is called any time the restart is printed 
while *print-escape* is nil.
In the case of interactive invocation, 
the result is dependent on the value of :interactive-function
as follows.
- :interactive-function
  Value is evaluated in the current lexical environment and
  should return a function of no arguments which constructs a 
  list of arguments to be used by invoke-restart-interactively 
  when invoking this restart.  The function may prompt interactively
  using query I/O if necessary.
 - :report-function
  Value is evaluated in the current lexical environment and
  should return a function of one argument, a stream, which
  prints on the stream a summary of the action that this restart
  takes.  This function is called whenever the restart is
  reported (printed while *print-escape* is nil).
  If no :report-function option is provided, the manner in which the
  restart is reported is implementation-dependent.
 - :test-function
  Value is evaluated in the current lexical environment and
  should return a function of one argument, a condition, which
  returns true if the restart is to be considered visible.