Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
A
alexandria
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Christophe Junke
alexandria
Commits
9e60a568
"README.md" did not exist on "ba45f7c56de33d4e7335befd8bfe4c6270157717"
Commit
9e60a568
authored
16 years ago
by
Nikodemus Siivola
Browse files
Options
Downloads
Patches
Plain Diff
additional restart for DEFINE-CONSTANT
parent
5ec9ae72
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
definitions.lisp
+16
-14
16 additions, 14 deletions
definitions.lisp
with
16 additions
and
14 deletions
definitions.lisp
+
16
−
14
View file @
9e60a568
(
in-package
:alexandria
)
(
in-package
:alexandria
)
(
defun
%reevaluate-constant
(
name
value
&key
(
test
'eql
)
)
(
defun
%reevaluate-constant
(
name
value
test
)
(
if
(
not
(
boundp
name
))
(
if
(
not
(
boundp
name
))
value
value
(
let
((
old
(
symbol-value
name
))
(
let
((
old
(
symbol-value
name
))
...
@@ -12,24 +12,26 @@
...
@@ -12,24 +12,26 @@
whose value is ~S.~:@>"
name
old
))
whose value is ~S.~:@>"
name
old
))
(
if
(
funcall
test
old
new
)
(
if
(
funcall
test
old
new
)
old
old
(
prog1
new
(
restart-case
(
cerror
"Try to redefine the constant."
(
error
"~@<~S is an already defined constant whose value ~
"~@<~S is an already defined constant whose value ~
~S is not equal to the provided initial value ~S ~
~S is not equal to the provided initial value ~S ~
under ~S.~:@>"
name
old
new
test
)
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
)
(
defmacro
define-constant
(
name
initial-value
&key
(
test
'
'eql
)
documentation
)
"Ensures that the global variable named by NAME is a constant with a
"Ensures that the global variable named by NAME is a constant with a value
value that is equal under TEST to the result of evaluating
that is equal under TEST to the result of evaluating INITIAL-VALUE. TEST is a
INITIAL-VALUE. TEST is a /function designator/ that defaults to
/function designator/ that defaults to EQL. If DOCUMENTATION is given, it
EQL. If DOCUMENTATION is given, it becomes the documentation string of
becomes the documentation string of the constant.
the constant.
Signals an error if NAME is already a bound non-constant variable.
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
Signals an error if NAME is already a constant variable whose value is not
equal under TEST to result of evaluating INITIAL-VALUE."
equal under TEST to result of evaluating INITIAL-VALUE."
`
(
defconstant
,
name
(
%reevaluate-constant
',name
`
(
defconstant
,
name
(
%reevaluate-constant
',name
,
initial-value
,
test
)
,
initial-value
:test
,
test
)
,@
(
when
documentation
`
(
,
documentation
))))
,@
(
when
documentation
`
(
,
documentation
))))
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment