Common lisp 如何将双引号符号转换为字符串

Common lisp 如何将双引号符号转换为字符串,common-lisp,Common Lisp,我知道如何将符号转换为字符串:符号名“hello”或字符串“hello”返回hello。如果符号被引用两次会怎样?例如:你好。字符串hello会导致错误。在SBCL中,错误消息是:“HELLO不是字符串指示符。”。。如何将hello转换为hello?既然hello等同于quote hello,您可以执行以下操作: CL-USER> (string (cadr ''hello)) "HELLO" 您还可以使用eval评估外部报价: 只需在REPL中检查数据的外观。*是绑

我知道如何将符号转换为字符串:符号名“hello”或字符串“hello”返回hello。如果符号被引用两次会怎样?例如:你好。字符串hello会导致错误。在SBCL中,错误消息是:“HELLO不是字符串指示符。”。。如何将hello转换为hello?

既然hello等同于quote hello,您可以执行以下操作:

CL-USER> (string (cadr ''hello))
"HELLO"
您还可以使用eval评估外部报价:


只需在REPL中检查数据的外观。*是绑定到最后一个计算结果的变量

CL-USER 1 > 'hello
HELLO

CL-USER 2 > (string *)
"HELLO"

CL-USER 3 > ''hello
(QUOTE HELLO)

CL-USER 4 > (string (second *))
"HELLO"

EVAL是不必要的,不要使用它。尽管这个问题已经得到了回答,我认为这里最大的问题是:为什么你有一个被引用的符号?它真的应该存在吗?我同意@LeonardoDagino的观点:几乎可以肯定,如果你不得不这样做的话,其他地方会有一些混乱。
CL-USER 1 > 'hello
HELLO

CL-USER 2 > (string *)
"HELLO"

CL-USER 3 > ''hello
(QUOTE HELLO)

CL-USER 4 > (string (second *))
"HELLO"