レイン開発日誌15

プログラムを作るプログラムを設計しよう!

と、その前に……

前回、プログラムとは「4種類の文」が組み合わさってできているにすぎない
ということを見たが、よくよく考えれば、実は2種類ではないかと思いついた。

まず、
1)代入文とは、

 a = 3

であるが、これは、

 a = 3 + 0 

と考えれば、そのまま「演算文」であるといえる。

逆に、
2)演算文とは、

 c = a + b 

であり、計算した結果を 別の変数に入れて取っておかないと
意味がないのだから、必ず「代入文」を含んでいるといえる。

ということで、
1)と2)は、「演算代入文」というひとつの種類の文として
まとめられるはずである。

さてさて。
次だ。

4)繰返し文 ( w h i l e 文)とは、

 w h i l e ( c < 100 ) {
  c = c + 10
}

であるが、よくよく考えると、「繰り返し文」は非常に恐ろしい。
というのは、「繰り返し文」をヘタに書くと、
「無限ループ」になってしまうからだ。

・無限ループの例

c = 2

 w h i l e ( c > 0 ) {
  c = c + 10
}

上の処理は、
「 c が 0 より大きいあいだは、{ }内の処理を繰り返す」
というものだが、よくみると、{ }の処理をいくら繰り返しても、
c が 0 より小さくなることはありえない。

(だって、{ }の処理を繰り返すたびに、 
 c はどんどん大きくなっていくのだから)

そのため、延々と永久に、{ }内の処理を繰り返すことになってしまい、
結果として、それ以上処理が進まなくなってしまうのだ。

(つまり、いつまで待っても、計算結果を出してくれない知能系が出来てしまう)

それでは困るので、いっそ、
この「繰り返し文」は、知能系のプログラムから外してしまおう
と思う。

それに、よくよく考えると、「繰り返し文」は必要ない。

というのは、有限の繰り返し文であれば、
「判断文 ( i f 文)」をたくさん並べれば、代用できるからだ。

3)判断文 ( i f 文)とは、

 i f ( c > 4) {
  c = c + 10
}

であるが、これをたくさん並べれば、「繰り返し文」と同等になる。

 c = 0

 i f ( c < 100) {
  c = c + 10
}

 i f ( c < 100) {
  c = c + 10
}

・・・・

 i f ( c < 100) {
  c = c + 10
}

上の処理は、
「 c が 100より小さいときは、{ }内の処理を実行せよ」
というのが、たくさんあるため、「繰り返し文」と同等である。

しかも、判断文を無限に並べるのはもちろん無理なので、
必ず有限の繰り返しとなり、絶対に「無限ループ」にはならない
というメリットがある。

とうわけで、
数値を計算するプログラムは、
「演算代入文」「判断文」の2種類が組み合わさってできているにすぎない
ということがわかった。

よし、これで「4種類」から「2種類」に、文の種類が減ったから
少し考えやすくなったぞ!

其処に<知能>はあるのかしら?