Я новичок, играющий с Lisp (на самом деле, Emacs Lisp). Это очень весело, за исключением случаев, когда я, кажется, снова и снова сталкиваюсь с теми же синтаксическими ошибками.
Например, здесь я встречался несколько раз. У меня есть форма cond
, например
(cond
((foo bar)
(qux quux))
((or corge
(grault warg))
(fred)
(t
xyzzy)))
и предложение по умолчанию, которое возвращает xyzzy
, никогда не выполняется, потому что оно фактически вложено внутри предыдущего предложения:
(cond
((foo bar)
(qux quux))
((or corge
(grault warg))
(fred))
(t
xyzzy))
Мне трудно увидеть такие ошибки, когда разница в отступе - это только одно пространство. Со временем это становится проще?
У меня также есть проблемы, когда есть большое расстояние между (отложенной) линией и линией, от которой она должна быть отступать. let
формы с большим количеством сложных привязок, например, или форма unless
с длинным условным:
(defun test ()
(unless (foo bar
(qux quux)
(or corge
(grault warg)
(fred))))
xyzzy)
Оказывается, xyzzy
никогда не было внутри формы unless
:
(defun test ()
(unless (foo bar
(qux quux)
(or corge
(grault warg)
(fred)))
xyzzy))
Я автоматически отступаю и использую подсветку круглых скобок, чтобы избежать подсчета круглых скобок. По большей части он работает как ветер, но иногда я обнаруживаю свои синтаксические ошибки только путем отладки. Что я могу сделать?