[mew-dist 28422] 関数の構造化
Kazu Yamamoto ( 山本和彦 )
kazu at example.com
2008年 5月 19日 (月) 10:24:16 JST
山本です。
たとえば、Scheme では、関数の中に関数を定義できます。
(define (boo i)
(define (foo)
(set! i (+ i 1)))
(define (woo)
(set! i (- i 1))))
このおかげで、内部の関数で変数を共有でき、コードを簡潔かつ明瞭に
記述できることがあります。(つまり、関数をクラスのように使える。)
Emacs Lisp では、関数の中に関数を定義する一般的な方法はありません。その
ため、Emacs Lisp の関数は、モノシリックになりがちで、大変読みにくく、拡
張性も低いです。
この問題を長年考えていたのですが、ついに関数の中に関数を定義する方法と
同じ効果が得られる方法を見つけましたので、さっそくモノシリックだった
mew-addrstr-parse-syntax-list に適応し commit しました。興味がある人は、
コードを覗いて見て下さい。
かなりテストをしたつもりですが、バグが紛れ込んだかもしれません。この関
数はメールのヘッダからアドレスを切り出すという、重要な役割を果たしてい
ますので、バグがあった場合 Mew に大きな影響を与えます。おかしい場合は
元に戻しますので、何か変だと感じたら教えて下さい。
--かず
Mew-dist メーリングリストの案内