Почему синтаксис массива Common Lisp не оценивает свои аргументы:
(let ((a 1)) #2A((a 2) (3 4))) => #2A((A 2) (3 4))
Я бы предположил, что это было #2A((1 2) (3 4)). Это потому что A недоступен во время чтения?
#2A((1 2) (3 4))
A
Короче говоря, да.
#2A((A 2) (3 4)) не является сокращением («синтаксический сахар») для (make-array '(2 2) :initial-contents (list (list a 2) (list 3 4))).Во всяком случае, это может быть рационализировано как (make-array '(2 2) :initial-contents (quote ((A 2) (3 4)))), но это будет немного вводить в заблуждение, поскольку построение массива уже происходит во время чтения.
#2A((A 2) (3 4))
(make-array '(2 2) :initial-contents (list (list a 2) (list 3 4)))
(make-array '(2 2) :initial-contents (quote ((A 2) (3 4))))