Lisp:引用符号列表';价值观
如何在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)" 但
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")