编辑我不只是询问“缩进”每一行代码,而是询问“漂亮的打印”和/或更广泛的“缩进”定义,其中行将根据它们包含的内容进行分组/拆分。
这是一个函数(我写它是为了解决欧拉问题,但这不是重点:我可以用不同的方式编写它),我正在尝试打印它:
手动缩进的版本:
(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缓冲区?