[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 メーリングリストの案内