加藤@ODNです.

In article <3989726news.pl@insigna.ie.u-ryukyu.ac.jp>, Shinji KONO wrote:
>河野真治 @ 琉球大学情報工学です。
>
>In article <u4qqpbl0q.fsf@anet.ne.jp>, OOTANI TAKASHI <tksotn@anet.ne.jp> writes
>> PL/IのSELECT/WHENはLISPのCONDのようにもCのswitch/caseのようにも使えるので、
>> それに習って、Cではswitch構文が、
>> switch {
>> case (cond1): stmt11; stmt12; break;
>> case (cond2): stmt21; stmt22; break;
>> case (cond3): stmt31; stmt32; break;
>> default:      stmt01; stmt02; break;
>> }
>> のように拡張されれば、else ifの連鎖は大部分不要になるでしょうね。
>
>僕は else if の方がきれいだと思うけど、人それぞれかな。

Lisp が好きならこっちが好きな人が多いかも.
#むか〜し流行った tiny 言語にこういう拡張をしたのがあったような.

>逆に  switch 文はいらないんだという説もあるみたいですね。
>現実には、if else if 連鎖の最適化でも結構難しいから、
>siwtch 文みたいな制限があった方が良いだろうと思います。

case の中が全部定数式なら今の switch と同じ処理で無問題でしょ? 構
文が違うから識別は容易だろうけど.

元々テーブルジャンプ(index jump) と同等の機能で,当時のコンパイラ技
術でも最適化が容易なように制限をきつくしてあるんだから,今の技術なら
拡張するのは難しくない.ただ,今のCでは case の後ろはラベル扱いだか
ら整合性が悪いのは確か.

>この拡張だと、cond1 - cond3 の順序関係が不定になりますよね。

「上から順に評価する」でいいんじゃない? break が無い時にどうするか
という問題はありますが...今の switch に合わせて,直ぐ下の case 内
の評価から続行でいいか.

今の switch では曖昧な時(同じ case label が2つある等)の処理はどう
なってるのかな...不定?

>else if は上から順々なんでしょうけど。式に副作用がでまくりの
>C だとちょっとうれしくないな。
>    case *p++ ==' a': ...
>    case *p++ ==' b': ...
>とか書く奴がきっと出るような気がする。

枝葉末節.
-- 
Hideki Kato <mailto:katoh@pop12.odn.ne.jp>


----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---