Common Lisp:为什么数组文本不计算参数?

Common Lisp:为什么数组文本不计算参数?,lisp,common-lisp,Lisp,Common Lisp,为什么公共Lisp数组语法不计算其参数: (let ((a 1)) #2A((a 2) (3 4))) => #2A((A 2) (3 4)) 我会猜它是#2A((12)(34))。这是因为A在读卡器时间不可用吗?简而言之,是的 #2A((a2)(34))不是(make array'(22):初始内容(list(list)(list a2)(list 34))的缩写(“语法糖”)。如果有的话,它可以合理化为(make array'(2 2):初始内容(quote((A 2)(3 4)),

为什么公共Lisp数组语法不计算其参数:

(let ((a 1)) #2A((a 2) (3 4)))
=> #2A((A 2) (3 4))
我会猜它是
#2A((12)(34))
。这是因为
A
在读卡器时间不可用吗?

简而言之,是的


#2A((a2)(34))
不是
(make array'(22):初始内容(list(list)(list a2)(list 34))的缩写(“语法糖”)。如果有的话,它可以合理化为
(make array'(2 2):初始内容(quote((A 2)(3 4))
,但这会有点误导,因为数组构造在读取时已经发生了。

您是否希望列表文字
'((A 3)(3 4))
进行评估?是否
((A 2)(3 4))
是列表文字?我以为是
引号
((a2)(34))
是列表文字。
只是
引号
的读取器宏。所以“
((a2)(34))
只是
(引号((a2)(34))
。在公共lisp程序的源代码中,带引号的列表是一个列表文字。裸列表表示程序的代码,而不是其数据。一开始有点混乱,但以后会有意义的。