如何在常见的 lisp 中格式化单个反斜杠?
How do I format a single backslash in common 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 和单个字符串 returns 调用 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
我目前正在尝试在 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 和单个字符串 returns 调用 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