私は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))
インデントの違いが1スペースしかない場合、このようなエラーを確認するのは困難です。これは時間とともに簡単になりますか?
(誤って)インデントされた線とそれがインデントされるべき線との間に大きな距離がある場合にも問題があります。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))
私は習慣的に自動インデントし、括弧のカウントを避けるために括弧の強調表示を使用します。ほとんどの場合、それはそよ風のように機能しますが、ときどき、デバッグするだけで構文エラーを発見します。私に何ができる?