Common Lisp: Почему литерал массива не оценивает аргументы? - PullRequest
6 голосов
/ 14 сентября 2010

Почему синтаксис массива Common Lisp не оценивает свои аргументы:

(let ((a 1)) #2A((a 2) (3 4)))
=> #2A((A 2) (3 4))

Я бы предположил, что это было #2A((1 2) (3 4)). Это потому что A недоступен во время чтения?

1 Ответ

5 голосов
/ 14 сентября 2010

Короче говоря, да.

#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)))), но это будет немного вводить в заблуждение, поскольку построение массива уже происходит во время чтения.

...