В Лиспе и других языках, которые используют S-выражения для синтаксиса, круглые скобки в первую очередь для выгоды компилятора, а компоновка и отступы (которые игнорируются компилятором) - для программистов.
Таким образом, нет необходимости ставить закрывающие скобки на их собственных строках: правильно выбранных разрывов строк и отступов будет достаточно, чтобы сделать структуру понятной.
Например,
(defun clone-indirect-buffer-other-window (newname display-flag &optional norecord)
"Like `clone-indirect-buffer' but display in another window."
(interactive
(progn
(if (get major-mode 'no-clone-indirect)
(error "Cannot indirectly clone a buffer in %s mode" mode-name))
(list (if current-prefix-arg
(read-buffer "Name of indirect buffer: " (current-buffer)))
t)))
(let ((pop-up-windows t))
(clone-indirect-buffer newname display-flag norecord)))
Структура понятна (для опытного программиста на Лиспе) из отступа.Ничего не было бы добавлено, если перенести некоторые закрывающие скобки в новые строки:
(defun clone-indirect-buffer-other-window (newname display-flag &optional norecord)
"Like `clone-indirect-buffer' but display in another window."
(interactive
(progn
(if (get major-mode 'no-clone-indirect)
(error "Cannot indirectly clone a buffer in %s mode" mode-name)
)
(list (if current-prefix-arg
(read-buffer "Name of indirect buffer: " (current-buffer))
)
t)
)
)
(let ((pop-up-windows t))
(clone-indirect-buffer newname display-flag norecord)
)
)
Я должен добавить, что почти все программисты на Лисп используют редактор, который отображает соответствующие скобки, выполняет автоматическое отступление и предоставляет пользовательский интерфейс.для работы прямо с сбалансированными выражениями.Например, в Emacs есть M - ( для вставки нового выражения, M -) для перемещения за конец текущего выражения, CMk для удалениявыражение после точки и т. д.
Таким образом, программисты на Лиспе никогда не должны вручную считать скобки, чтобы выяснить, какие из них совпадают.
Тейлор Р. Кэмпбелл красноречиво выражает это обоснование:
Фактические символы в скобках - это просто лексические токены, которым следует присвоить небольшое значение.Программисты на Лиспе не проверяют скобки по отдельности или, если не считать Азатота, подсчитывают скобки;вместо этого они рассматривают структуры более высокого уровня, выраженные в программе, особенно те, которые представлены отступом.Лисп не о написании последовательности последовательных инструкций;речь идет о построении сложных структур путем суммирования частей.Композиция сложных структур из частей находится в центре внимания программ на Лиспе, и это должно быть легко видно из кода на Лиспе.Беспорядочно ставить скобки в скобки о презентации - это раздражает программиста на Лиспе, который в противном случае даже не увидел бы их по большей части.