【发布时间】:2012-05-11 19:41:11
【问题描述】:
编辑我不只是询问“缩进”每一行代码,而是询问“漂亮的打印”和/或更广泛的“缩进”定义,其中行将是根据它们包含的内容进行分组/拆分。
这是一个函数(我写它是为了解决欧拉问题,但这不是重点:我可以用不同的方式编写它),我正在尝试打印它:
版本手动缩进:
(apply max
(flatten
(for [x (range 100 1000)]
(map
#(if (= (str (* x %)) (apply str (reverse (str (* x %)))))
(* x %)
0)
(range x 1000)))))
显然,这不是一种真正的 Lisp 缩进/打印样式,而且我想从一开始就养成良好的习惯,所以我尝试“漂亮地打印”它,从 Emacs 的 slime 中执行以下操作-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)))))
据我了解,lambda 的 #(...) 符号是“阅读器宏”。那么如何在不触发宏扩展的情况下进行漂亮的打印呢?更一般地说:我怎样才能漂亮地打印“我在文本编辑器中看到的内容”?
另外,几乎所有事情都在一个新的线路上进行是正常的吗?例如:
(apply
max
(flatten
(for
[x (range 100 1000)]
(map
...
似乎浪费了相当多的垂直屏幕空间。这是 Lisp 代码应该缩进的方式吗?
还有一个相关的问题:Emacs 能否配置为“漂亮打印”选定区域或整个 .clj 缓冲区?
【问题讨论】:
标签: emacs macros clojure read-eval-print-loop pretty-print