Hey! MIT/GNU Scheme provides a very nice user interface for this:
1 ]=> foo ;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> (restart 1) ;Abort! 1 ]=> (+ 2 "foo") ;The object "foo", passed as the second argument to integer-add, is not the correct type. ;To continue, call RESTART with an option number: ; (RESTART 2) => Specify an argument to use in its place. ; (RESTART 1) => Return to read-eval-print level 1. 2 error> (restart 2) New argument: 3 ;Value: 5 Ludo’.