[英]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和單個字符串調用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.