Common lisp 如何访问引用列表中的变量

Common lisp 如何访问引用列表中的变量,common-lisp,Common Lisp,我如何告诉Lisp我想“作为列表”而不是“作为函数”评估列表 当我输入这个时,它返回 (X) 很好,它没有评估列表(如我所愿)。但是它没有替换变量x的值。'e完全引用表达式e,并且无法知道要计算哪些子表达式。如果使用反引号而不是引号,则可以使用逗号取消子表达式的引号 在您的示例中,您可以 (let ((x 500)) `(,x . nil)) 这相当于”(500.nil),因为x是不带引号的。使用列表: (let ((x 500)) (list x 3)) => (500 3)

我如何告诉Lisp我想“作为列表”而不是“作为函数”评估列表

当我输入这个时,它返回

(X)

很好,它没有评估列表(如我所愿)。但是它没有替换变量x的值。

'e
完全引用表达式
e
,并且无法知道要计算哪些子表达式。如果使用反引号而不是引号,则可以使用逗号取消子表达式的引号

在您的示例中,您可以

(let ((x 500)) `(,x . nil))
这相当于
”(500.nil)
,因为
x
是不带引号的。

使用
列表

(let ((x 500))
  (list x 3))

=> (500 3)

仙人掌的回答很好,但我想我会向你提供一些额外的信息:)

在'(x.nil)中,x不是一个变量,而是一个符号。符号是用来命名事物的。这种区别看起来很愚蠢,但实际上可以帮助你在将来直觉地解决这些问题

“变量”是符号和值之间的绑定

因此,计算x基本上是说‘给我以符号x命名的值’

函数和变量可以用相同的符号命名,因为它们在不同的名称空间中,所以

(defun x () "jam")
(defvar x 10)

(print x) ;; prints 10
(print (x)) ;; prints "jam"
这是完全正确的。在你的回复中尝试一下

鉴于此,再看看

'(x . nil) 
x既不是函数也不是变量,它只是一个符号

希望这有帮助

'(x . nil)