電網郊外散歩道

本と音楽を片手に、電網郊外を散歩する風情で身辺の出来事を記録。退職後は果樹園農業と野菜作りにも取り組んでいます。

魔法使いの弟子はどこを間違えたか

2005年05月09日 22時28分09秒 | コンピュータ
デュカスの「魔法使いの弟子」という音楽がある。ディズニーの「ファンタジア」で記憶している方も多いことだろう。魔法使いの弟子は、まだ未熟なくせに、師匠に禁じられていた魔法を使ってホーキに水汲みをさせるが、止めさせ方を知らないため家中が水浸しになり、それでも止まらず・・・というお話。
これを、プログラミング初心者にたとえると面白い。たぶん、弟子が使ったのは

10 井戸に行き
20 水を汲み
30 部屋まで運び
40 水桶にあけ
50 goto 10

というものだったのだろう。これでは、無限ループになってしまっている。
条件付ループ文でなくてはならないのに、単純ループ文にした誤りである。

while (水桶の深さ > 水位) do { 井戸に行き
水を汲み
部屋まで運び
水桶にあけ }
end 止める

多分、魔法使いの師匠は、goto 文を多用する BASIC プログラマであるか、又は while~end~ 文や repeat~until~ 文、あるいは for~next 文などをまだ教えていなかったのだろう。
for~next 文は、何回運ぶといっぱいになるか、経験的にわかってさえいればすぐにできたはずだが、while 文の場合、ホーキには目がないから、「いっぱいになったら」という条件を何でキャッチするかが問題かもしれない。
いずれにしろ、魔法使いの弟子が悪いのは事実だが、この魔法使いの師匠も、goto 文を無批判に教えているようなので、弟子の教育の仕方から見る限りあまり有能なプログラマだとは思えない、などと思ってしまうのは、音楽を聴く正しい態度とはいえないかもしれない(^_^;)>poripori
コメント (6)