lisp - 如何在常见的 lisp 中格式化单个反斜杠?

标签 lisp common-lisp gnu-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

关于lisp - 如何在常见的 lisp 中格式化单个反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52782838/

相关文章:

lisp - 加快删除相邻的重复项

matrix - 阻塞矩阵乘法

lisp - 获取 HTTP header 作为列表

lisp - 你最喜欢的关于 Lisp 的误解是什么?

Common-Lisp 递归类型说明符

macros - Lisp:在宏中扩展属性名称

lisp - HTDP 练习 6.6.1 - 模板函数是什么意思?

.net - F# 相当于 Eval

lisp - 在 Lisp (CLOS) 中访问槽的问题

ubuntu - 软件包 GCL 和 CLISP 之间有什么区别?