Subject: Re: declaring something to be NOT special...
From: Erik Naggum <erik@naggum.no>
Date: 1998/12/04
Newsgroups: comp.lang.lisp
Message-ID: <3121725021809953@naggum.no>

* David Bakhash <cadet@bu.edu>
| how, in Lisp, do I specifically declare a variable to be NON-special?

  sorry, there's no (standard) way to do that.  (you might still succeed in
  resetting the flag that makes the compiler believe a symbol has special
  binding -- I've had to do that in a running system.)

| I'm afraid that with ACL, if you leave out the (declare (special ...))
| because you specifically don't want that variable to be declared special,
| then the compiler assumes it to be, and this may alter the running of the
| code.

  this is dead wrong.  what happens if you have an unbound variable in your
  code is that Allegro CL treats it _as_if_ it were declared special, i.e.,
  it _assumes_ it is special for that function (or the smallest enclosing
  lexical scope, actually), it does _not_ declare it special for you.
  here's an example:

CL-USER(33): (compile nil (lambda (x) (+ x y)))
; While compiling (:anonymous-lambda 25):
Warning: Free reference to undeclared variable y assumed special.
#<Function (:anonymous-lambda 25) @ #x20791422>
t
t

  this means that the code goes to look for Y in the dynamic environment as
  it would a special variable.

  (if you can't make this form work because COMPILE barfs on interpreted
  function objects, let me know, and I'll send you a patch I have made that
  has not yet made the official rounds at Franz Inc.)

#:Erik
-- 
  The Microsoft Dating Program -- where do you want to crash tonight?