Common lisp 与格式函数非常混淆

Common lisp 与格式函数非常混淆,common-lisp,Common Lisp,我已经试了好几个小时了,我还是想不出来。 该死格式化函数非常混乱 基本上我需要的是将列表转换为字符串。列表可以包含字符串,结果字符串中的那些字符串应该是双转义的。这就是我的意思: 如果我有一个foo两个42,那么结果字符串应该如下所示: \一\\\foo\\\two 42 \-注意,整个字符串都在双引号中,这就是为什么foo必须包装两次 我不能破解这个。有人请帮忙。您可以使用,两次: prin1 to string相当于使用:escape t写入字符串,以便写入转义字符;但是,使用prin1来字

我已经试了好几个小时了,我还是想不出来。 该死格式化函数非常混乱

基本上我需要的是将列表转换为字符串。列表可以包含字符串,结果字符串中的那些字符串应该是双转义的。这就是我的意思:

如果我有一个foo两个42,那么结果字符串应该如下所示:

\一\\\foo\\\two 42 \-注意,整个字符串都在双引号中,这就是为什么foo必须包装两次

我不能破解这个。有人请帮忙。

您可以使用,两次:

prin1 to string相当于使用:escape t写入字符串,以便写入转义字符;但是,使用prin1来字符串比使用笨拙的字符串更好:

CL-USER> (write-to-string
          (write-to-string '((one "foo") (two 42)) :escape t)
          :escape t)
"\"((ONE \\\"foo\\\") (TWO 42))\""
您还可以使用打印转义字符的格式,例如:

您可以使用,两次:

prin1 to string相当于使用:escape t写入字符串,以便写入转义字符;但是,使用prin1来字符串比使用笨拙的字符串更好:

CL-USER> (write-to-string
          (write-to-string '((one "foo") (two 42)) :escape t)
          :escape t)
"\"((ONE \\\"foo\\\") (TWO 42))\""
您还可以使用打印转义字符的格式,例如:


相似使用格式:FORMAT nil~s FORMAT nil~s'one foo two 42相似使用格式:FORMAT nil~s FORMAT nil~s'one foo two 42我很好奇你为什么要这么做我很好奇你为什么要这么做
CL-USER> (format nil "~s" (format nil "~s" '((one "foo") (two 42))))
"\"((ONE \\\"foo\\\") (TWO 42))\""