如何访问引用列表中的变量
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既不是函数也不是变量,它只是一个符号。
希望对您有所帮助!
如何告诉 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既不是函数也不是变量,它只是一个符号。
希望对您有所帮助!