我是一个对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))
我习惯自动缩进,并使用括号高亮功能来避免数括号。大部分时候都很顺利,但偶尔会发现语法错误只能通过调试才能发现。我该怎么办?