コメントの削除
ソースコードからコメント部分を削除するプログラム decomment を書いてください.
どう書く?org
すくなくとも,decomment を記述したのと同じ言語で書かれているソースコードが
扱えるようにしてください.
(use file.util) (define (main args) (dolist (sexp (file->sexp-list (cadr args))) (write sexp) (newline)) 0)
かな。SRFI 38の#n=/#n#があると書き出しが止まらなくなるけど、それについては柿さんのようにwrite/ssを使うなりすればいい。
readのおかげで簡単にこういうことができるのはまぁ便利ですね。ところで、これだとタブや改行、余分な空白が消えるだけでなく、リーダマクロが展開されてしまう。さらにひどいことに、SRFI 10の#,(hoge ...)を使ったファイルを読み込んだ場合にはエラーになってしまう*1。
そんなわけで、お手軽にやるといろいろとボロが出てきちゃうんだけれど、じゃあ正攻法でまともにdecommentを作ろうとすると、それはそれで結構面倒臭そう。他の言語でも「文字列の中は別に処理しなくちゃ」などと言っているけど、Schemeではそれに加えてSRFI 30のブロックコメントやSRFI 62のS式コメントがあるのだから。
んー、なんかSRFIの話ばっかになった。が、まだ他にも問題になるものがあるかもしれない。