2024 Clojure 状态调查中分享您的看法!

欢迎!请参阅关于页面了解更多的信息。

+1 投票
IO

cl-format 的文档声称它与 CL 版本的格式完全兼容。然而,在 CL 中,~A 指令(打印美观)可以漂亮地打印相应的参数。例如,(format out "~A" some-list) 输出与 (pprint some-list out) 相同。然而,在 Clojure 中,(cl-format out "~A" some-list)some-list 的内容输出为 单行

是否有人知道是否可以正确实现这一点?我看到了动态变量 print-pretty,但它在 ~A 上似乎没有效果。

经过一番搜索,我发现我认为是罪魁祸首的问题。根据 cl_format.clj 中的第 1338 行,似乎 ~A 无条件地分派到 print-str 而不是某种形式的 pprint-to-str。我怀疑这是一个错误,因为我没有在那里看到任何解释说漂亮打印机是如何在这里触发的。

它应该使用类似于 (fn [data] (with-out-str (pprint data))) 的方式,而不是使用 print-str

1 答案

0 投票

选为最佳答案
 
最佳答案

我觉得你可能想要 ~W 替代?根据 http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/sec_22-3-4-3.html,“任何参数(任何对象)打印时都会遵守每个打印机控制变量(例如写入时)。”这看起来像是你在例子中所请求的(与 pprint 相匹配)。

Clojure 中关于 cl-format 的唯一详细文档是作者的http://clojure.github.io/clojure/doc/clojure/pprint/CommonLispFormat.html,但是它已经很长时间没有进行活跃的开发(尽管我们偶尔也会对其进行维护)。

我在http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html处看到一条关于 ~A 和 ~W 以及格式化打印的相关注释,这涉及到那里的某些要求上的混淆。

by
谢谢。这确实是很好的信息。在 SBCL 中,我使用最多的 CL,~A 触发了格式化打印器。我会进一步研究以更好地理解 CL。然而,我很高兴使用 cl-format 中的 ~W,因为它似乎可以做我想做的。
by
顺便说一下,我要向实现了 clojure 的 cl-format 的人表示敬意和祝贺。这肯定是一项极其艰巨的项目。我个人对此非常感激。
...