РЕДАКТИРОВАТЬ Я не просто спрашиваю об "отступе" каждой отдельной строки кода, но о "красивой печати" и/или более широком определении "отступа", где строки будут сгруппированы/разделены в зависимости от того, что они содержат.
Вот функция (которую я написал для решения задачи Эйлера, но суть не в этом: я мог написать ее по-другому), которую я пытаюсь красиво напечатать:
Версия с отступом вручную:
(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 РЕПЛ:
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
...
кажется пустой тратой некоторого вертикального экрана. Это именно так должен быть отступ в коде на Лиспе?
И последний связанный с этим вопрос: можно ли настроить Emacs для «красивой печати» выбранной области или всего буфера .clj?