我是一个使用 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))
我习惯性地自动缩进并使用括号突出显示来避免计算括号。在大多数情况下,它的工作就像轻而易举,但偶尔,我只是通过调试才发现我的语法错误。我能做些什么?