SSブログ

繰り返しを止めて考える。 [プログラム]

ループ(繰り返し処理)をどのように説明したらいいか、説明のたびにいろいろと工夫してみている。今日はそのパートツー。

 繰り返しを理解するのに、for構文は、全ての制御処理が最初の一行に集約されているので、whileではなく、for文で繰り返しを教えるのがいい。昨日は、そのfor文を、「指折り数えること」と考えたが、今日は、繰り返される処理の方に焦点を当てて考えよう。

 繰り返しは、最初のforで繰り返しの条件、つまり、いくつからいくつまで、変数の値を動かすか、を設定したら、繰り返す、ということは忘れてしまう必要がある。変数、たとえば、iはそのとき、一つの数値に固定される。というか、常に、何か一つの具体的な数値であると考える。それは、条件の範囲内なら、どの数でもいい。

 その一つの固定された値に対して、繰り返される処理の部分は、繰り返しではなく、一回の処理にすぎない。もう繰り返しのことは考えないようにしよう。繰り返しというのは、それを繰り返しと考えているうちは、頭がこんがらかって、いろいろなものを混同してしまう。また、人間は、繰り返しをひと纏まりで表現してしまうので、コンピュータがするように一つ一つの状態を積み重ねて、それで繰り返しが出来上がることを忘れてしまう。話をするだけならば、それでもいいが、コンピュータに作業を命じるならば、その手順はコンピュータが理解できるように、単純な処理に還元し、単純な指令を発しなければならない。

 そうやって、一回だけの処理を考えられるようになれば、繰り返しは考えなくていいことになり、繰り返しにまつわる複雑そうな内容は存在しないことになる。繰り返しが必要なときにも、必ず、それは繰り返しが必要のない部分に還元することができる。繰り返しは消去できるのである。

 問題は、どうやって、繰り返しの中の一回の状態に焦点を絞れるかにかかっている。もし、その処理の中に、もう一度for文が必要になったとしても、それもまた同じように、繰り返しの条件を確認したら、その内部の一回だけの処理に焦点を絞れる。そうやって、さらに内側の処理に還元したら、たとえば、それはアステリスクを1個表示する、という処理だけになるだろう。

 今度は、その一番単純な処理から徐々に繰り返しを復元していく。一番単純な部分で、アステリスクを一つ表示する、という処理は、それを取り囲むforの条件で、ある回数繰り返される。たとえば、20回繰り返される。すると、そのfor文全体は、日本語で言えば、「アステリスクを20個表示する」という動作だと考えられる。実際にこれを実現するには、for文による繰り返しが必要だが、それを一つのまとまった処理として考えてしまえば、それは20個アステリスクを表示するという一つの単純な処理と考えることができる。

 そして、それを含めた一連の一回だけの処理を考え、それがさらに外側のforの条件によって、ある回数繰り返される。このようにして、一番根本の処理から徐々に繰り返しが復元されるが、しかし、このときにはもう、繰り返しの複雑な処理は考えなくてもよくなっている。単にこれこれの処理を、何回繰り返す、と単純に日本語で表現できるようになる。

 つまり、まず、繰り返しに拘泥せずに、一番基本的な処理にまで還元していき、それを起点に繰り返しの条件を付け加えていく、という考え方をすると、繰り返しを全体として考えていたときの、こんがらかる難解さが消えていくのがわかるだろう。

 学生に教えるとき、こういうことを、プログラムのforの条件節を紙で隠して、それを見せないようにして、一回の処理に意識を集中させ、それが十分確認できたら、それからforの条件節を見せて、それがどういう条件かを確認させる、という具合に説明していくのである。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。