编辑我不只是问'缩进'的每一行代码,而是关于“美丽的印刷”和/或更广泛的定义“缩进”,其中行将被分组/分裂取决于它们包含的内容。漂亮的打印和扩展
这里有一个功能(这是我写的解决欧拉问题,不过这不是问题的关键:我可以不同写好了),这我想漂亮的打印:
版本手动缩进:
(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代码的方法没有”官方“缩进Lisp代码的方式”* ...啊......我以为有一个。或者至少是一种“文化上”接受的方式。例如,似乎人们普遍认为,不应该把一个新的关闭括号放在一个换行符上:没有一个“美丽的打印机”可以这样做,而且几乎没有任何由知识丰富的Lisp程序员编写的Lisp代码这样做。如果没有“官方”标准,那么我就是采用“最常见”的方式来格式化Lisp代码; ) –
Clojure模式的缩进可能接近于此。它或多或少与clojure.org和许多库中使用的缩进相同。 – Daan