formatting - 如何在 Common Lisp 中打印文本,以便可以使用转义序列对其进行格式化(类似于在 Racket 中显示)?

标签 formatting common-lisp stdout

如何在 Common Lisp 中打印格式化输出? 在 Racket我用 display 来实现,如下所示:

(display "\33[3min italics\33[m\n")

我尝试过 (format t "~ain italics~a""\33[3m""\33[m") 但它不起作用。这也不是:(format t "~cin italics~c"#\33[3m #\33[m)

最佳答案

这里的主要问题是如何获得正确的字符序列。\33 是 Ascii char 27 的八进制或 Common Lisp 中的#\Esc。

(format t "~C[3min italics~C[m~%" #\Esc #\Esc)

会做你想做的事。

但你可以做得更好。有一个库叫cl-interpol它通过修改 reader 来展示 Common Lisp 的灵活性,以便您可以使用已经熟悉的语法。 例如:

* (ql:quickload 'cl-interpol)
To load "cl-interpol":
  Load 1 ASDF system:
    cl-interpol
; Loading "cl-interpol"
...
(CL-INTERPOL)

* (named-readtables:in-readtable :interpol-syntax)
#<NAMED-READTABLE :INTERPOL-SYNTAX {1002E6D6B3}>

* (format t #?"\33[3min italics\33[m\n")
in italics
NIL

关于formatting - 如何在 Common Lisp 中打印文本,以便可以使用转义序列对其进行格式化(类似于在 Racket 中显示)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72854612/

相关文章:

lua - 嵌入语言: Lua vs Common Lisp (ECL)

list - 在 Lisp 中替换列表小节的最惯用方法

python - 如何使用 paramiko 连续读取长时间运行的 ssh 命令的输出而不阻塞

c - 标准输出重定向因 wprintf() 而失败

c# - 使用 C# 将格式从一行复制到另一行

android - 如何在 Android 上将持续时间格式化为具有本地化时间单位的字符串?

date - 如何在Lua中打印出这种格式的日期和时间?

lisp - 使用 html5-parser 和 xmls Common Lisp 浏览网页

Python 2.x - 将二进制输出写入标准输出?

Java文件代码格式化标准