漂亮的打印和扩展

编辑我不只是问'缩进'的每一行代码,而是关于“美丽的印刷”和/或更广泛的定义“缩进”,其中行将被分组/分裂取决于它们包含的内容。漂亮的打印和扩展

这里有一个功能(这是我写的解决欧拉问题,不过这不是问题的关键:我可以不同写好了),这我想漂亮的打印:

版本手动缩进:

(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

回到顶部