Why is it that the Common Lisp array syntax is not evaluating its arguments:
(let ((a 1)) #2A((a 2) (3 4)))
=> #2A((A 2) (3 4))
I would have guessed it was #2A((1 2) (3 4))
. Is this because A
is not available at reader time?
Why is it that the Common Lisp array syntax is not evaluating its arguments:
(let ((a 1)) #2A((a 2) (3 4)))
=> #2A((A 2) (3 4))
I would have guessed it was #2A((1 2) (3 4))
. Is this because A
is not available at reader time?
In short, yes.
#2A((A 2) (3 4))
is not an abbreviation ("syntactic sugar") for (make-array '(2 2) :initial-contents (list (list a 2) (list 3 4)))
. If anything, it could be rationalized as (make-array '(2 2) :initial-contents (quote ((A 2) (3 4))))
, but this would be a bit misleading as the array construction already happens at read-time.