Anonymous user
Undefined values: Difference between revisions
→{{header|Common Lisp}}: Discuss local rebinding.
(→{{header|Common Lisp}}: Added.) |
(→{{header|Common Lisp}}: Discuss local rebinding.) |
||
Line 157:
(setf *y* 43) ;; *y* is bound again.</lang>
By contrast, lexical variables never lack a binding. Without an initializer, they are initialized to nil.
The same goes for local re-binding of special variables:
<lang lisp>
(defvar *dyn*) ;; special, no binding
(let (*dyn* ;; locally scoped override, value is nil
lex) ;; lexical, value is nil
(list (boundp '*dyn*) *dyn* (boundp 'lex) lex)) -> (T NIL NIL NIL)
(boundp '*global*) -> NIL</lang>
Here we can see that inside the scope of the let, the special variable has a binding (to the value <code>NIL</code>) and so <code>(boundp '*dyn*)</code> yields <code>T</code>. But <code>boundp</code> does not "see" the lexical variable <code>lex</code>; it reports that <code>lex</code> is unbound. Local binding constructs never leave a variable without a value, be it dynamic or lexical: both <code>*dyn*</code> and <code>lex</code> evaluate to NIL, but using very different mechanisms.
=={{header|D}}==
|