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。我怀疑这是一个 bug,因为我没有在那里看到任何解释如何在此时触发美化打印程序的注释。

它似乎应该使用类似 (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,但它已经很长时间没有开发过(尽管我们偶尔对其进行维护)。

我看到了关于 ~A 和 ~W 以及美观打印的相关说明,在http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/clm/node200.html,与那里的要求相关的一些混乱有关。

谢谢。这真是很有用的信息。在 SBCL,我最常用的 CL 中,~A 会触发美化打印器。我将进一步研究以更好地了解 CL。然而,我非常乐意在 cl-format 中使用 ~W,因为它似乎正是在做我想做的事情。
顺便说一句。向为 clojure 实现 cl-format 的每个人表示敬意和祝贺。这肯定是一个极为困难的项目。我本人对此项艰苦的工作表示感激。
...