>>150
Gauche用。

(define (result le la sb se) (if (zero? (+ la se)) (newline) (begin (format
#t ";; ~d枚 " (+ la se)) (cond ((- sb se) (^x (not (zero? x))) => (pa$
format #t "~d枚足りません\n")) (else (format #t "ぴったりです\n"))))))
(define (main args) (when (< 1 (length args)) (with-input-from-file (cadr args)
(lambda() (let ((le 0) (la 0) (sb 0) (se 0)) (do ((ch (read-char) (read-char)))
((eof-object? ch) (result le la sb se)) (cond ((char=? #\( ch) (if (= sb se)
(begin (set! sb 1) (set! se 0) (set! la (+ la le))) (inc! sb)) (write-char ch))
((char=? #\) ch) (inc! se) (inc! le) (write-char ch)) ((char=? #\newline ch)
(result le la sb se) (set! le 0) (set! la 0)) (else (write-char ch)))))))))

文字や文字列のリテラルとかコメント中に括弧が有った場合も括弧として
認識してしまうんだけど、とりあえずもうめんどくさくなったからここまでで投下するわー。