漂亮的打印和扩展
编辑我不只是问'缩进'的每一行代码,而是关于“美丽的印刷”和/或更广泛的定义“缩进”,其中行将被分组/分裂取决于它们包含的内容。漂亮的打印和扩展
这里有一个功能(这是我写的解决欧拉问题,不过这不是问题的关键:我可以不同写好了),这我想漂亮的打印:
版本手动缩进:
(apply max (flatten
(for [x (range 100 1000)]
(map
#(if (= (str (* x %)) (apply str (reverse (str (* x %)))))
(* x %)
0)
(range x 1000)))))
很明显,这不是一个真正的Lisp压印/印刷风格,因为我想从一开始就养成良好的习惯,我试图“漂亮地打印”它,从Emacs的中做到以下几点: -repl clojure REPL:
user> (doc pprint) ;; just to show which version of pprint I'm using clojure.pprint/pprint
...
于是,我就这样做:
user> (pprint '(apply max (flatten
(for [x (range 100 1000)]
(map
#(if (= (str (* x %)) (apply str (reverse (str (* x %)))))
(* x %)
0)
(range x 1000))))))
而且我得到以下几点:
(apply max
(flatten
(for
[x (range 100 1000)]
(map
(fn*
[p1__13958#]
(if
(=
(str (* x p1__13958#))
(apply str (reverse (str (* x p1__13958#)))))
(* x p1__13958#)
0))
(range x 1000)))))
据我了解的#(...)符号的拉姆达是一个“读者宏”。那么如何在不触发宏扩展的情况下打印出漂亮的图片呢?更一般地说:我怎样才能打印出“我在文本编辑器中看到的内容”?
另外,几乎所有事情都在一个新的线上正常吗?例如:
(apply max
(flatten
(for
[x (range 100 1000)]
(map
...
似乎是相当一些垂直屏幕房地产的浪费。这是方式Lisp代码应该缩进吗?
还有最后一个相关问题:Emacs可以配置为“漂亮打印”选定区域或整个缓冲区吗?
回答:
有没有“官方”缩进lisp代码的方式,但我喜欢clojure模式缩进clojure代码(见下文)。
我不知道为什么pprint打印代码的方式,但根据this页面,这是一个早期版本,功能尚未完成。
对于emacs缩进部分,您可能需要查看clojure-mode。
回答:
我所见到的最接近共识的是“像Emacs那样缩进它”,我认为是极其正确的,我应该包含这个推论“缩进它像vim一样”。像eclipse + CCW这样的其他编辑似乎与此相当接近。尽管默认的漂亮打印机添加了更多的换行符。
回答:
这里是目前我在做什么:
(defn pprint-code [code] (with-pprint-dispatch code-dispatch
(binding [*print-suppress-namespaces* true]
(pprint code))))
注:查找范围clojure.pprint解决自由瓦尔。
这当然是一种改进。我仍然不知道如何调整*print-miser-width*
和/或*print-right-margin*
以获得更好的输出。因人而异。我目前的牛肉是(自动)gensyms - 我希望它们在某些情况下打印时会被去毛刺。理想情况下,表单/函数可以定义它们自己的格式化规则,例如,让绑定应该总是在单独的行上。我不知道能用clojure.core做到这一点。
仅供参考,请参阅overview。
以上是 漂亮的打印和扩展 的全部内容, 来源链接: utcz.com/qa/258348.html