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 投票
by
被选中了 by
 
最佳答案

我认为你可能想要 ~W?根据http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/sec_22-3-4-3.html,“任何对象,即参数,都遵循每个打印控制器变量(如write)进行打印。”这似乎做了你所要求的事情(与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
顺便说一句。向实现cl-format的clojure项目开发人员致敬和祝贺。这肯定是一项非常困难的项目。对我来说,这是一个感谢辛勤工作的机会。
...