Lisp:引用符号列表';价值观

Lisp:引用符号列表';价值观,lisp,elisp,quote,Lisp,Elisp,Quote,如何在Lisp中创建一个引用列表,该列表使用列表中符号的值,而不是符号本身?例如,取两个变量foo和bar,foo=“hello”和bar=“world”。如何从这两个变量中获取包含“hello”“world”的列表。我能想到的最好的事情是: ;; This is Emacs Lisp (let ((foo "hello") (bar "world")) (message (prin1-to-string '(foo bar))) ;; prints "(foo bar)" 但

如何在Lisp中创建一个引用列表,该列表使用列表中符号的值,而不是符号本身?例如,取两个变量
foo
bar
foo
=
“hello”
bar
=
“world”
。如何从这两个变量中获取包含“hello”“world”的列表。我能想到的最好的事情是:

;; This is Emacs Lisp
(let ((foo "hello")
      (bar "world"))
  (message (prin1-to-string '(foo bar)))
;; prints "(foo bar)"

但这是错误的。做这件事的正确方法是什么?

没关系,进一步的实验表明答案是
(列出食物条)

编辑:实现这一点的另一种方法是使用
`(,foo,bar)


没关系,进一步的实验表明答案是
(列出foo-bar)

编辑:实现这一点的另一种方法是使用
`(,foo,bar)


这是一个相当奇怪的问题,因为如果你想要
foo
bar
的值,你不应该引用它。仅使用基本体可以创建以下列表:

(let ((foo "hello")
      (bar "world"))
  (cons foo (cons bar nil))) ; ==> ("hello" "world")
有一个名为的函数为您执行cons,因此
(list foo bar'foo'bar)
(cons foo(cons bar(cons'foo(cons'bar nil)))
==>
(“hello”“world”foo bar)
在与上述代码相同的范围内


使用,您可以混合常量,使
`(,foo,bar foo bar)
等效,但请注意,在我的示例中,常量尾部,如
'(foo bar)
可以重复使用。

这是一个相当奇怪的问题,因为如果您想要
foo
bar
的值,就不需要引用它。仅使用基本体可以创建以下列表:

(let ((foo "hello")
      (bar "world"))
  (cons foo (cons bar nil))) ; ==> ("hello" "world")
有一个名为的函数为您执行cons,因此
(list foo bar'foo'bar)
(cons foo(cons bar(cons'foo(cons'bar nil)))
==>
(“hello”“world”foo bar)
在与上述代码相同的范围内

使用,您可以混合常量,使
`(,foo,bar-foo-bar)
是等效的,但是请注意,在我的示例中,常量尾部,如
'(foo-bar)
会被重用。

在Common Lisp中,也可以:
(let(…)(msg`(foo,foo-bar,bar))
。自动翻译成
(let(…)(msg(list'foo-foo'bar))
。可能与Common Lisp中的重复,也可以是:
(let(…)(msg`(foo,foo-bar,bar))
。自动转换成<代码>(让……(MSG(列表)Fo-Fo”栏))< /代码>。如果你回答这个问题,你可能应该考虑这样做。你可以,如果你回答了这个问题,你应该考虑这样做。
(let ((foo "hello")
      (bar "world"))
  (cons foo (cons bar nil))) ; ==> ("hello" "world")