编辑 我不仅仅是要求每一行代码都缩进,而是关于“漂亮打印”和/或更广泛定义的“缩进”,其中行将根据其包含内容进行分组/拆分。
这是一个函数(我编写它来解决欧拉问题,但这不是重点:我可以用不同的方式编写它),我正在尝试漂亮地打印:
手动缩进版本:
(apply max
(flatten
(for [x (range 100 1000)]
(map
#(if (= (str (* x %)) (apply str (reverse (str (* x %)))))
(* x %)
0)
(range x 1000)))))
显然这不是唯一正确的Lisp缩进/打印风格。因为我想从一开始就养成好习惯,所以我尝试了"pretty print",并从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表达式中的 #(...) 表示是一个“读取器宏(reader macro)”。那么如何在不触发宏扩展的情况下进行漂亮打印呢?更一般地说,如何漂亮打印“我在文本编辑器中看到的内容”?
此外,几乎所有东西都换行是正常的吗?例如:
(apply
max
(flatten
(for
[x (range 100 1000)]
(map
...
看起来占用了相当多的垂直屏幕空间,这是Lisp代码应该缩进的方式吗?
最后一个相关问题:Emacs是否可以配置为“漂亮地打印”选定区域或整个.clj缓冲区?