[mew-dist 22279] Re: accelerating by-folder
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
2002年 11月 14日 (木) 13:43:21 JST
From: Kazu Yamamoto (山本和彦) <kazu at example.com> さん曰く
Subject: [mew-dist 22278] Re: accelerating by-folder
Message-ID: <20021114.131754.63233477.kazu at example.com>
Date: Thu, 14 Nov 2002 13:17:54 +0900 (JST)
> かなりトリッキーですが、以下のような方法ではどうでしょうか? mapcar は
> 組み込み関数ですが、うまく break しているようです。
>
> (let ((alist (mew-local-folder-alist))
> (case-fold-search nil)
> found)
> (catch 'break
> (mapcar (lambda (x)
> (cond
> ((and (stringp (cdr x)) (string-match "[A-Z]" (cdr x)))
> (throw 'break (setq found (cdr x))))
> ((and (stringp (car x)) (string-match "[A-Z]" (car x)))
> (throw 'break (setq found (car x))))))
> alist))
> found)
以前聞いた話だと、扱う list の長さが 10ぐらいまでは mapcar の方
が速いけど、それ以上なら while の方が速い、らしいとのことです。
また、mapcar はそれ自身の戻り値を作っていますが、今回の場合はそ
れも無駄に作っていることになるので、こういう場合は、
(catch 'break
(while (setq x (car alist))
(cond
((and (stringp (cdr x)) (string-match "[A-Z]" (cdr x)))
(throw 'break (setq found (cdr x))))
((and (stringp (car x)) (string-match "[A-Z]" (car x)))
(throw 'break (setq found (car x)))))
(setq alist (cdr alist))))
で十二分じゃないかと。
--
白井秀行 (mailto:shirai at example.com)
Mew-dist メーリングリストの案内