You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Common Lisp格式指令实现等效的漂亮打印逻辑?

用格式指令实现等价的Common Lisp漂亮打印逻辑

你可以使用FORMAT的迭代指令结合换行、缩进控制,写出和原代码语义完全一致的紧凑格式指令,以下是两种实现方式:

强制换行版本(完全匹配示例输出)

这个版本会强制每个键值对的键和值换行,和你给出的示例输出完全一致:

CL-USER> (let ((properties
                '(:a "the letter a" :b "the letter b"
                  :a-property-with-a-long-key "and a very long value")))
           (format t "(~{~&  (~A~%   ~A)~})" properties))
;; 输出
((:A
  "the letter a")
 (:B
  "the letter b")
 (:A-PROPERTY-WITH-A-LONG-KEY
  "and a very long value"))
;; 返回值
NIL

格式指令拆解:

  • (~{~}~):外层迭代结构,遍历properties列表中的元素
  • ~&:开启新的逻辑行,确保每个键值对组单独占一行并缩进2个空格
  • (~A~% ~A):将每个键值对包裹在括号内,~A打印键,~%强制换行后缩进3个空格打印值
  • 最外层的(和)对应原代码pprint-logical-block的:prefix和:suffix

线性换行版本(贴近原代码的:linear语义)

如果你希望保留原代码中(pprint-newline :linear)的行为——当行空间足够时键值对同行显示,不足时才换行,可以用~@_替代~%:

CL-USER> (let ((properties
                '(:a "the letter a" :b "the letter b"
                  :a-property-with-a-long-key "and a very long value")))
           (format t "(~{~&  (~A~@_   ~A)~})" properties))

这个版本的~@_会根据当前行剩余空间决定是否换行,和原代码的线性换行逻辑完全一致,输出效果在空间足够时会更紧凑,空间不足时和示例输出一致。

内容的提问来源于stack exchange,提问作者Michaël Le Barbier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:11:03