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
顺便说一句。我要向那个为Clojure实现了 cl-format 的人表示敬意和祝贺。这肯定是一个极其困难的工程。我个人对此深感感激。
...