日下部陽一(void)さんと遊ぼう(5)

正直に告白すると、私は、日下部さんのその返答を誤読した。いまにして思えば、日下部さんは二つのことを言っている。一つ目は、


while(exp1) { st1 st2 exp2; }

for(;exp1;) { st1 st2 exp2; }

が等価では無いということ。二つ目は、whileのほうがforより短くなるケースがあるということ。


二つの事項の因果関係はどこにも明示されていないのだ。むしろ、『st1に「何が入るか」によるでしょ。 』のあとの二行の空行は、いまにして思えば「後者は前者の論理的な帰結ではないですよ、別の話題ですよ」という意味だったように思える。


それを私はこともあろうか、前者ゆえに(そのテクニックも用いることで)後者(whileで書いたほうがforより短くなることがある)が導き出せるのだと勘違いしてしまった。これは私の理解力の至らなさの結果である。しかし、(言い訳がましいが)、前者の事項は私にそのような誤読をさせるほどに衝撃的だったのだ。


そんなわけで、私は誤読したまま、このあと話が突き進むことになる。しばらくこのあとの展開をご覧いただきたい。


2006年11月20日 09:23 やねうらお


> st1に「何が入るか」によるでしょ。

(゚Д゚)ほんとー?

http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n843.htm
の6.8.5.3に、forをwhileで書き換える例が載ってますが、その例に
for(;exp;) st を適用すると while (exp) st と等価なのでは?

いまにして思えば、これが大チョンボ
書いた直後に、ああ、なんて俺は馬鹿なんだ、と後悔した。
理由は明日の日記に書く。


2006年11月20日 09:28 やねうらお


> では、conitune以外で、forとwhileが等価でない箇所は
あと、どことどこか知ってますよね?

コニチューン(conitune)てなんですの…(´ω`)

それはともかく。forとwhileとの違いって、continue時の動作の違い以外に
思いつかないなぁ…。

continueにしてもforの第三項が無い状態なら同じ動作だし…。forの第一項は
block scope導くけどもそれはいま関係ない話だし…。

(つづく)