См., Например:
CL-USER> (write "\\" :escape nil)
\
"\\"
Здесь выше, первая обратная косая черта - это ваша строка, напечатанная без обратной косой черты.Возвращаемым значением является строка, напечатанная REPL со стандартным синтаксисом io (http://clhs.lisp.se/Body/m_w_std_.htm),, который экранирует строки.
Итак, ваша строка содержит один обратный слеш, но печатается таким образом, чтоон может быть прочитан обратно, поэтому необходимо избегать обратной косой черты в выходной строке.
Обратите также внимание, что вызов format
с NIL и одной строкой возвращает ту же строку.
Вы можетепроверить свои строки, например, сопоставив каждый символ с его именем:
(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