[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [emacs-w3m:00027] cl, flim
- From: Shun-ichi GOTO <gotoh@xxxxxxxxxxx>
- Date: Fri, 02 Mar 2001 14:47:58 +0900 (JST)
- References: <20010302083318K.1000@pine.kuee.kyoto-u.ac.jp> <20010302.114722.01366331.gotoh@taiyo.co.jp> <mpa66hsrdhb.fsf_-_@azalea.kuee.kyoto-u.ac.jp>
>>>>> at 02 Mar 2001 13:39:28 +0900
>>>>> 土 == TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp> said,
土> cl-macs の件ですが、dolist が入ってしまっていたのはうっかりミスです。
後> 手元ではdolist から while に戻してありますので、後ほどcommitします。
土> 前言を翻すようで申し訳ないのですが、この件についてはもう少し考えません
土> か? 特に開発初期はコードの可読性を優先すべきだという気がしてきたので。
望むところです。(^^)
## CL 必須です、と、キッパリといってしまうのも一つの解だともいえますし
土> dolist は大変便利なので、私も使いたいのですが、たった一つのマクロのた
土> めに CL に依存するのも何だかな、という気がしています。
後> 個人利用のcodeは遠慮なくclを使ってますが、配付モノとなると
後> 悩むのですよね。しかも規模の小さいプログラムだと特に。
後> 幸い、dolistでないと複雑怪奇というわけでもありませんので
後> clなしでwhileでやりましょう。
後> # ほんと、なんで標準で入れてくれないのか不思議でならないのだけど(^_^;
後> # 便利だし、意味が通るし。
後> # これがないから、(while ...)の決まり文句がうっとおしく感じ、
後> # しまいにゃ mapcar を使ってしまう、というよくないシナリオが...
土> うーん、そんなに良くないシナリオですか? 私も mapcar を多用する人なんで
土> すが。処理速度が低下することは知ってますが、そんなに問題かなあ…。山岡
土> さんの mapcar2while.el に期待と言うところでしょうか。
スピードの問題は(重要ではありますが)また別の話ですね。
良くないというのは、mapcar は本来写像を作るためのものであるにも関わらず、
それをループがわりに使う、という、『道具の使い方』の点でいってます。
また、mapcar は戻り値のために cons セルを作成します。戻り値を使わないの
であれば、それは無駄なコストですし、そもそもそういう値を返すための関数な
わけです。
while より dolist の方が、よりコードの意味を適切に表現できる、というのと
類似の話も、もちろんあります。
土> while 使っててループ変数を更新するのを忘れて、無限ループにはまったこと
土> も何度もあって、それ以来 while はかなり嫌いになりました。と言うか、
土> while 使うと返り値が必ず nil になるのが関数的じゃないような気がします。
土> それから、ループ条件の制御にフラグ変数が余計に必要になることが多いのも
土> 嫌なんですけど…。
全くもって同意します。
while で確かに実現は出来るけど、dolist とか for-each とか、簡素に書ける
ものが欲しいですよね。
土> そのために、
土> (catch 'last
土> (while loop-condigin
土> ...
土> (if last-condition (throw 'last return-value))))
土> という定型文を多用することになるのですが、こうすると非局所脱出を使って
土> いるので、これに起因する速度低下が気になる。
気にしないようにはしていますが、気になります。(^^;
それ自体が更に(while でループしている場合などは『コスト高いだろうな』と、
特に気になります。
実測してはいないので、根拠はありませんが。
# 個人的にはループの内側でなければ『使ってよし』というかんじで線を引いて
# ます。
土> と、こんなことを気にしていると、不毛なことになってくるので、最近は出来
土> るだけ気にしないようにしているのですが。
まったくもってそのとおり(^^;
それが自己防衛というか、ストレスをためない生き方というか
土> Emacs のプロセス間通信で標準エラー出力だけ取り除くというのはできないん
土> ですよねぇ…。さてどうしたものか。
後> call-process なら出来るのにstart-process は出来ないんですねぇ。
土> Perl で言うところの Open2 と Open3 の問題と同根のような気がします。標
土> 準エラーを分離すると、途端にデッドロックしやすくなりますよね。
両方をバッファに拾おうとすると大変ですが、call-process のように、
ファイル化する、あるいは捨てる、というのであればさほどの問題は
でないと思うのですが,,, そうでもないのかなぁ
--- Regards,
Shun-ichi Goto <gotoh@taiyo.co.jp>
R&D Group, TAIYO Corp., Tokyo, JAPAN