[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: [emacs-w3m:00027] cl, flim



>>>>> 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