diff --git a/definitions.lisp b/definitions.lisp
index d1db72d6c320ffb9e56744b09a68486bc8569651..863e1f696286edd85936508714b517e9718f85fb 100644
--- a/definitions.lisp
+++ b/definitions.lisp
@@ -1,6 +1,6 @@
 (in-package :alexandria)
 
-(defun %reevaluate-constant (name value &key (test 'eql))
+(defun %reevaluate-constant (name value test)
   (if (not (boundp name))
       value
       (let ((old (symbol-value name))
@@ -12,24 +12,26 @@
                        whose value is ~S.~:@>" name old))
             (if (funcall test old new)
                 old
-                (prog1 new
-                  (cerror "Try to redefine the constant."
-                          "~@<~S is an already defined constant whose value ~
-                           ~S is not equal to the provided initial value ~S ~
-                           under ~S.~:@>" name old new test)))))))
+                (restart-case
+                    (error "~@<~S is an already defined constant whose value ~
+                              ~S is not equal to the provided initial value ~S ~
+                              under ~S.~:@>" name old new test)
+                  (ignore ()
+                    :report "Retain the current value."
+                    old)
+                  (continue ()
+                    :report "Try to redefine the constant."
+                    new)))))))
 
 (defmacro define-constant (name initial-value &key (test ''eql) documentation)
-  "Ensures that the global variable named by NAME is a constant with a
-value that is equal under TEST to the result of evaluating
-INITIAL-VALUE. TEST is a /function designator/ that defaults to
-EQL. If DOCUMENTATION is given, it becomes the documentation string of
-the constant.
+  "Ensures that the global variable named by NAME is a constant with a value
+that is equal under TEST to the result of evaluating INITIAL-VALUE. TEST is a
+/function designator/ that defaults to EQL. If DOCUMENTATION is given, it
+becomes the documentation string of the constant.
 
 Signals an error if NAME is already a bound non-constant variable.
 
 Signals an error if NAME is already a constant variable whose value is not
 equal under TEST to result of evaluating INITIAL-VALUE."
-  `(defconstant ,name (%reevaluate-constant ',name
-                                            ,initial-value
-                                            :test ,test)
+  `(defconstant ,name (%reevaluate-constant ',name ,initial-value ,test)
      ,@(when documentation `(,documentation))))