如何在普通 lisp 中格式化单个反斜杠?



我目前正在尝试在GNU Common lisp 2.49中获取... hline的输出,但我无法使格式正常工作。这是我到目前为止尝试获得单个反斜杠的方法:

(format nil " ") => " "
(format nil "\ ") => "\ "
(format nil "\ ") => "\ "

我以为双反斜杠会让它工作,为什么反斜杠不转义另一个反斜杠?

例如:

CL-USER> (write "\" :escape nil)

"\"

在上面,第一个反斜杠是你的字符串,打印时没有转义反斜杠。返回值是字符串,由 REPL 使用标准 io 语法 (http://clhs.lisp.se/Body/m_w_std_.htm( 打印,用于转义字符串。

因此,您的字符串包含一个反斜杠,但以可以读回的方式打印,因此需要转义输出字符串中的反斜杠。

另请注意,使用 NIL 和单个字符串调用format将返回相同的字符串。

您可以检查字符串,例如通过将每个字符映射到其名称:

(loop
for input in '(" " 
"\ "
"\ ")
collect (list :input input
:characters (map 'list #'char-name input)))

这给出了:

((:INPUT " " :CHARACTERS ("Space"))
(:INPUT "\ " :CHARACTERS ("REVERSE_SOLIDUS" "Space"))
(:INPUT "\ " :CHARACTERS ("REVERSE_SOLIDUS" "Space")))

或者,只需使用inspect

CL-USER> (inspect "\hline")
The object is a VECTOR of length 6.
0. #\
1. #h
2. #l
3. #i
4. #n
5. #e

请注意创建字符串和实际输出到流之间的区别:

CL-USER 69 > (format nil "\ ")
"\ "                               ; result
CL-USER 70 > (format t "\ ")
                                   ; output
NIL                                 ; result
CL-USER 71 > (format *standard-output* "\ ")
                                   ; output
NIL                                 ; result

相关内容

  • 没有找到相关文章

最新更新