http://pastebin.com/d2294a374
Я разместил код с двумя отступами там. Я запутался здесь, потому что я не уверен, что делать, когда функция имеет несколько аргументов. Должен ли каждый аргумент быть в отдельной строке или одинаков? более того, когда у нас есть что-то вроде (def xyz (fn abc [a1 a2] ... ли (fn abc ... перейти в другую строку?
Я читаю следующее из http://mumble.net/~campbell/scheme/style.txt,, но мне кажется, это не имеет особого смысла.
** Отступы и выравнивание
Оператор любой формы, т.е. первая подчиненная форма после открытия
круглая скобка, определяет правила для отступа или выравнивания
остальные формы. Многие имена в этой позиции указывают на особые
правила выравнивания или отступа; это специальные операторы, макросы или
процедуры, которые имеют определенные структуры параметров.
Если первая подчиненная форма не является специальным именем, тогда, если вторая
подчиненная форма находится на одной строке, выровняйте начальный столбец всех следующих
подчиняется тому из второй подчиненной формы. Если вторая подчиненная форма включена
в следующей строке выровняйте его начальный столбец с первым
подчиненной формы и сделайте то же самое для всех оставшихся подчиненных форм.
В общем, Emacs будет правильно вставлять код на Lisp. Run `C-M-q '
(indent-sexp) в любом коде, чтобы гарантировать, что он имеет отступ, и
настроить Emacs так, чтобы любые нестандартные формы были с отступом
соответственно.
Неприемлемо:
(+ (sqrt -1)
(* x y)
(+ p q))
(+
(sqrt -1)
(* x y)
(+ p q))
Приемлемый:
(+ (sqrt -1)
(* x y)
(+ p q))
(+
(sqrt -1)
(* x y)
(+ p q))
Обоснование: выравнивание столбцов позволяет читателю следовать
операнды любой операции напрямую, просто путем сканирования
вниз или вверх, чтобы соответствовать общему столбцу. Отступ диктует
состав; запутанный отступ является бременем для читателя, который желает
получить структуру без сопоставления скобок вручную.