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



我知道如何将符号转换为字符串:(symbol-name 'hello)(string 'hello)返回"Hello"。如果符号被引用两次会怎样?例如:''hello(string ''hello)导致错误。在SBCL中,错误消息是:'HELLO is not a string designator.。如何将''hello转换为"HELLO"?

只需在REPL中检查数据的样子。*是一个绑定到最后一次求值结果的变量。

CL-USER 1 > 'hello
HELLO
CL-USER 2 > (string *)
"HELLO"
CL-USER 3 > ''hello
(QUOTE HELLO)
CL-USER 4 > (string (second *))
"HELLO"

由于''hello相当于(quote (quote hello)),您可以:

CL-USER> (string (cadr ''hello))
"HELLO"

您也可以使用eval来计算外部quote:

CL-USER> (string (eval ''hello))
"HELLO"