Introduction
Introduction Statistics Contact Development Disclaimer Help
tdefinitions.lisp - clic - Clic is an command line interactive client for gophe…
git clone git://bitreich.org/clic/ git://hg6vgqziawt5s4dj.onion/clic/
Log
Files
Refs
Tags
LICENSE
---
tdefinitions.lisp (1656B)
---
1 (in-package :alexandria)
2
3 (defun %reevaluate-constant (name value test)
4 (if (not (boundp name))
5 value
6 (let ((old (symbol-value name))
7 (new value))
8 (if (not (constantp name))
9 (prog1 new
10 (cerror "Try to redefine the variable as a constant."
11 "~@<~S is an already bound non-constant variable ~
12 whose value is ~S.~:@>" name old))
13 (if (funcall test old new)
14 old
15 (restart-case
16 (error "~@<~S is an already defined constant whose v…
17 ~S is not equal to the provided initial va…
18 under ~S.~:@>" name old new test)
19 (ignore ()
20 :report "Retain the current value."
21 old)
22 (continue ()
23 :report "Try to redefine the constant."
24 new)))))))
25
26 (defmacro define-constant (name initial-value &key (test ''eql) document…
27 "Ensures that the global variable named by NAME is a constant with a v…
28 that is equal under TEST to the result of evaluating INITIAL-VALUE. TEST…
29 /function designator/ that defaults to EQL. If DOCUMENTATION is given, it
30 becomes the documentation string of the constant.
31
32 Signals an error if NAME is already a bound non-constant variable.
33
34 Signals an error if NAME is already a constant variable whose value is n…
35 equal under TEST to result of evaluating INITIAL-VALUE."
36 `(defconstant ,name (%reevaluate-constant ',name ,initial-value ,test)
37 ,@(when documentation `(,documentation))))
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.