Я разместил там код с двумя разными отступами. Я запутался здесь, потому что не уверен, что делать, если функция имеет несколько аргументов. Каждый аргумент должен быть в отдельной строке или в одном и том же? более того, когда у нас есть что-то вроде (def xyz (fn abc [a1 a2] ... идет ли (fn abc ... в другую строку?)
Я читаю следующее из http://mumble.net/~campbell/scheme/style.txt, но мне кажется, что это не имеет особого смысла.
** Отступ и выравнивание
Оператор любой формы, то есть первая подчиненная форма, следующая за открывающей круглой скобкой, определяет правила отступа или выравнивания остальных форм. Многие имена в этой позиции указывают на особые правила выравнивания или отступа; это специальные операторы, макросы или процедуры с определенными структурами параметров.
Однако, если первая подчиненная форма не является особым именем, тогда, если вторая подчиненная форма находится на той же строке, выровняйте начальный столбец всех следующих подчиненных форм с столбцом второй подчиненной формы. Если вторая подчиненная форма находится на следующей строке, выровняйте ее начальный столбец со столбцом первой подчиненной формы и сделайте то же самое для всех остальных подчиненных форм.
В общем, Emacs будет правильно делать отступ для кода Lisp. Запустите `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))
Обоснование: выравнивание по столбцам позволяет читателю напрямую следить за операндами любой операции, просто просматривая вниз или вверх, чтобы найти общий столбец. Отступы диктуют структуру; вводящие в заблуждение отступы - это бремя для читателя, который хочет вывести структуру без сопоставления скобок вручную.