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

How to access variable in quoted list

如何告诉 Lisp 我想要计算一个列表 "as a list",而不是 "as a function"?

(let ((x 500)) '(x . nil))

当我输入这个时,它 returns

(X)

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

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

在你的例子中,你可以这样做

(let ((x 500)) `(,x . nil))

等同于 '(500 . nil),因为 x 未加引号。

使用list:

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

=> (500 3)

Cactus 的回答很好,但我想向您提供一些额外的信息:)

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

一个'variable'是一个符号和一个值之间的绑定。

所以评估 x 基本上就是说 'give me the value that is named by the symbol x'

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

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

(print x) ;; prints 10
(print (x)) ;; prints "jam"

这是完全正确的。在您的回复中尝试一下!

鉴于此,再看一下

'(x . nil) 

x既不是函数也不是变量,它只是一个符号。

希望对您有所帮助!