インデント

今まで出力テキストに全く改行を加えてなかったので、それじゃまずいってことでインデントを実装した。
実装はしたが、それが読みやすいと言えるかはわからない…。


人間にとって一番理解しやすいフォーマットを、手作業込みではなく機械的に作り出すのはけっこう骨が折れると思うんです。

これが普通の構造化言語だったら「この行長くなりすぎちゃったな、改行しようかな、どうしようかな」程度の悩みしか持たないけど、Lisp のインデントは悩みどころがいっぱいです。*1


XML であれば、

<element attr1="1st" attr2="2nd">
	...
</element>

で、element が tagName になることは言語仕様上、約束されている。
しかし Lisp の場合、

(defun name (v1 v2) g)
(lambda (v1 v2) g)

パラメータの (v1 v2) を関数適用するのかと思わせておいて実はしない。リストの先頭だからといって関数だとは限らないのだ。これらは special form なだけに special な扱いをしないといけないのだろうか。しかし特別扱いするならするで、今度は方言による違いが。

*1:XML で言うと tagName と attributes と characters と childNodes がごちゃごちゃに組み合わさってるようなもんじゃないですかねこれ。