Lisp 在一行上漂亮地打印对象

标签 lisp common-lisp pretty-print sbcl

我正在将列表的列表写入 .dot 文件以生成树。 lisp 中的 pretty-print 似乎在输出中插入了新行,因此当我执行点文件时,新行使得生成的图形难以读取。

我查看了format 文档,但我还不能很好地利用它。

这是一个应该打印的示例列表:

(((TOWER 'D 'C ^LEFT '0 ^RIGHT '2 ^BOTTOM '4 ^TOP '8)
  (TOWER 'C 'B ^LEFT '0 ^RIGHT '2 ^BOTTOM '2 ^TOP '6)
  (TOWER 'B 'A ^LEFT '0 ^RIGHT '2 ^BOTTOM '0 ^TOP '4) (ON 'D 'C)
  (ON 'C 'B) (ON 'B 'A))
 ((TOWER 'D 'C ^LEFT '0 ^RIGHT '2 ^BOTTOM '4 ^TOP '8)
  (TOWER 'C 'B ^LEFT '0 ^RIGHT '2 ^BOTTOM '2 ^TOP '6)
  (TOWER 'B 'A ^LEFT '0 ^RIGHT '2 ^BOTTOM '0 ^TOP '4) (ON 'D 'C)
  (ON 'C 'B) (ON 'B 'A))
 ((TOWER 'D 'C ^LEFT '0 ^RIGHT '2 ^BOTTOM '4 ^TOP '8)
  (TOWER 'C 'B ^LEFT '0 ^RIGHT '2 ^BOTTOM '2 ^TOP '6)
  (TOWER 'B 'A ^LEFT '0 ^RIGHT '2 ^BOTTOM '0 ^TOP '4) (ON 'D 'C)
  (ON 'C 'B) (ON 'B 'A))
 ((TOWER 'D 'C ^LEFT '0 ^RIGHT '2 ^BOTTOM '4 ^TOP '8)
  (TOWER 'C 'B ^LEFT '0 ^RIGHT '2 ^BOTTOM '2 ^TOP '6)
  (TOWER 'B 'A ^LEFT '0 ^RIGHT '2 ^BOTTOM '0 ^TOP '4) (ON 'D 'C)
  (ON 'C 'B) (ON 'B 'A))
 ((TOWER 'D 'C ^LEFT '0 ^RIGHT '2 ^BOTTOM '4 ^TOP '8)
  (TOWER 'C 'B ^LEFT '0 ^RIGHT '2 ^BOTTOM '2 ^TOP '6)
  (TOWER 'B 'A ^LEFT '0 ^RIGHT '2 ^BOTTOM '0 ^TOP '4) (ON 'D 'C)
  (ON 'C 'B) (ON 'B 'A))
 ((TOWER 'D 'C ^LEFT '0 ^RIGHT '2 ^BOTTOM '4 ^TOP '8)
  (TOWER 'C 'B ^LEFT '0 ^RIGHT '2 ^BOTTOM '2 ^TOP '6)
  (TOWER 'B 'A ^LEFT '0 ^RIGHT '2 ^BOTTOM '0 ^TOP '4) (ON 'D 'C)
  (ON 'C 'B) (ON 'B 'A)))

下面是列表如何打印到文件中:

(((TOWER 'D 'C
^LEFT '0
^RIGHT '2
^BOTTOM '4
^TOP '8)
(TOWER 'C 'B
^LEFT '0
^RIGHT '2
^BOTTOM '2
^TOP '6)
(TOWER 'B 'A
^LEFT '0
^RIGHT '2
^BOTTOM '0
^TOP '4)
(ON 'D 'C)
(ON 'C 'B)
(ON 'B 'A))
((TOWER 'D 'C
^LEFT '0
^RIGHT '2
^BOTTOM '4
^TOP '8)
(TOWER 'C 'B
^LEFT '0
^RIGHT '2
^BOTTOM '2
^TOP '6)
(TOWER 'B 'A
^LEFT '0
^RIGHT '2
^BOTTOM '0
^TOP '4)
(ON 'D 'C)
(ON 'C 'B)
(ON 'B 'A))
((TOWER 'D 'C
^LEFT '0
^RIGHT '2
^BOTTOM '4
^TOP '8)
(TOWER 'C 'B
^LEFT '0
^RIGHT '2
^BOTTOM '2
^TOP '6)
(TOWER 'B 'A
^LEFT '0
^RIGHT '2
^BOTTOM '0
...
...
...

应该使用什么 format 指令来获得正确格式化的输出?

这是我正在使用的代码

(format stream "~A [shape=record, label=\"{~A|~A|~A}\"];~%" a b c d)

最佳答案

如果你设置*print-right-margin*对于非常大的数字, pretty-print 不应该插入任何换行符。

它默认为 nil 表示设备(例如,您的显示器)的宽度。

关于Lisp 在一行上漂亮地打印对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32031431/

相关文章:

list - 方案满屋戳功能

lisp - Lisp中的 "apply"和 "mapcar"有什么区别

Common Lisp 中的 Haskell 样式部分

format - cl :format 列表中每三个单词后换行

vb.net - 防止Visual Studio 2015删除VB.NET文件中的行继续字符(_)

c - 是否有自动设置 C 文件样式的程序?

macros - 控制Common Lisp中宏扩展顺序的规则

common-lisp - 带有CLISP和CL-WHO的CGI示例?

ruby - 使用 to_html 时如何避免在 Nokogiri 中漂亮地打印 HTML?

list - 删除列表中的特定项目?