[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
defvar, defparameter, :unbound
Date: Tue, 5 Nov 85 12:53 EST
From: Guy Steele <gls@THINK-AQUINAS.ARPA>
Date: Mon, 4 Nov 85 23:18:59 EST
From: "Glenn S. Burke" <GSB@MIT-MC.ARPA>
From: Daniel L. Weinreb <DLW@SCRC-QUABBIN.ARPA>
Date: Sat, 2 Nov 85 23:55:45 EST
From: Nick Papadakis <isrlist@tove.umd.edu>
On the lispmachines, defvar will take a second argument of :unbound,
meaning that the variable will be initialized to an unbound state.
I'm not sure which Lisp machine this message is supposed to apply to,
but just for the record, the Symbolics system does not do this.
This hack was added to NIL. My personal feeling is that the special
case value is just asking to screw some poor user whose code just
happens to naively use :UNBOUND to mean something... But i added the
defvar hack anyway, because the ability to do both the defvar and
specify the documentations string in a single form seemed worth it.
Doing
(defvar *foo*)
(setf (documentation '*foo* 'variable) "Documentaiton string")
looks pretty crufty. Keyworded defvar, anyone?
One idea that was discussed previously was
(defvar *foo* *foo* "Documentation string")
which self-evidently means "declare *foo* and initialize to its existing
value", but by special dispensation it arranges to work even when *foo*
is already unbound, i.e., it leaves it alone. This is fine for DEFVAR,
but is less appealing for DEFPARAMETER.
Recall that DEFPARAMETER's initial value is not optional, with implied
(perhaps stated) semantics that it must always have a value.