On Fri, Jul 8, 2011 at 4:52 AM, Mark Evenson evenson@panix.com wrote:
@Alan: I value your intuition that the sharpsign dot form here isn't portable. But is there a specific part of CLHS that you are thinking about here that I could pore over?
I was trying to find. The thing is that #. isn't compile-time - it's even earlier - read time, and I suspect the issue is the environment it is compiled in might not be well-defined.
The documented way to accomplish what is desired, I believe, is to use load-time-value inside a compiled function.
(defun make-foo () (load-time-value <value form> t)) ; read-only-p <- t, cause it is a constant (defparameter +foo+ (make-foo))
http://www.lispworks.com/documentation/HyperSpec/Body/s_ld_tim.htm
"load-time-value form &optional read-only-p => object
Arguments and Values: form---a form; evaluated as described below. read-only-p---a boolean; not evaluated. object---the primary value resulting from evaluating form."
"If a load-time-value expression appears within a function compiled with compile, the form is evaluated at compile time in a null lexical environment. The result of this compile-time evaluation is treated as a literal object in the compiled code."
-Alan