2016年07月29日
ループの次元:その1
プログラミングを始めたのは中学生の時だった。
最初にプログラミングを学んで、一番衝撃だったのは「ループ」だった。
ああ、これでもう短調な繰り返し作業はしなくて済む。
と思った。
ループを知って初めて書いたプログラムを仮想プログラミング言語で書くと下記のようになる。
1: ループ[
2: "アホ"と表示
3: ]ループここまで
上記のコードはいわゆる「無限ループ」というもので、一度実行させるとプログラムをストップするまで「アホ」という文字を表示し続ける。
最初にプログラミングを学んで、一番衝撃だったのは「ループ」だった。
ああ、これでもう短調な繰り返し作業はしなくて済む。
と思った。
ループを知って初めて書いたプログラムを仮想プログラミング言語で書くと下記のようになる。
1: ループ[
2: "アホ"と表示
3: ]ループここまで
上記のコードはいわゆる「無限ループ」というもので、一度実行させるとプログラムをストップするまで「アホ」という文字を表示し続ける。
当時、漢字や英単語を覚えるために、チラシの裏などに何度も繰り返し書くことで漢字や英単語を覚えようとしたものだが、このプログラムを走らせると画面を「アホ」の文字で埋め尽くす。疲れることなく、しかも高速に。
アホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホ。。。
ループはその中にさらにループを入れることで「入れ子」にすることができる。
たとえば下記。
1: ループA[
2: ループB(3回ループ)[
3: "アホ"と表示
4: ]ループBここまで
5: 改行
6: ]ループAここまで
上記のコードは、2行目から4行目までは先程の3行のコードと内容的に似たものではあるが、この場合は無限ループではなく、「3回ループしたら終わる」ものである。
つまり、「アホ」という文字を3回表示したらループBを抜けて、5行目に進む。
5行目では改行して、また1行目に戻る。
ループAは無限ループなので、3個の「アホ」からなる行を無限に書き続けることになる。
アホアホアホ
アホアホアホ
アホアホアホ
アホアホアホ
アホアホアホ
。。。
この「ループの入れ子」は何重にもすることができる。この入れ子の深さが「次元」である。
最初の例の3行のコードは、画面が「アホ」の文字で埋め尽くされるので、「面」のように見えるが、改行がないので、本当は一本の線である。つまり、一次元。
これはループがひとつだけなので一次元、という理屈に合致する。
それに対してふたつ目の例は、3つの「アホ」からなる行を繰り返すことによって「面」を作り出すことになっている。
つまりここで表示されるものは2次元であり、これについても「二重ループだから2次元」という理屈に合うものである。
たとえばこれを3Dのグラフィックスに応用するとすれば、3重ループをつくることで3次元の「アホ」を描くこともできる。
この理屈はループの入れ子の深さがいくつであっても適用できるので、3重以上の入れ子になったループについてもそれを「n次元」とすることができる。
ただしここでの「n次元」というものは、いわゆる「物理空間」を指すわけではない。コンピューター・グラフィックスによって3D空間を描画した、としても、それは2次元であるディスプレイ上に”3次元空間に見える”ものを描いたものに過ぎない。
なので、「4重ループを作ったからといって4次元空間を作り出すことでタイムマシンが可能だ!」ということはない。そういうことを言うやつには4重ループの「アホ」を贈ろう。
アホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホアホ。。。
ループはその中にさらにループを入れることで「入れ子」にすることができる。
たとえば下記。
1: ループA[
2: ループB(3回ループ)[
3: "アホ"と表示
4: ]ループBここまで
5: 改行
6: ]ループAここまで
上記のコードは、2行目から4行目までは先程の3行のコードと内容的に似たものではあるが、この場合は無限ループではなく、「3回ループしたら終わる」ものである。
つまり、「アホ」という文字を3回表示したらループBを抜けて、5行目に進む。
5行目では改行して、また1行目に戻る。
ループAは無限ループなので、3個の「アホ」からなる行を無限に書き続けることになる。
アホアホアホ
アホアホアホ
アホアホアホ
アホアホアホ
アホアホアホ
。。。
この「ループの入れ子」は何重にもすることができる。この入れ子の深さが「次元」である。
最初の例の3行のコードは、画面が「アホ」の文字で埋め尽くされるので、「面」のように見えるが、改行がないので、本当は一本の線である。つまり、一次元。
これはループがひとつだけなので一次元、という理屈に合致する。
それに対してふたつ目の例は、3つの「アホ」からなる行を繰り返すことによって「面」を作り出すことになっている。
つまりここで表示されるものは2次元であり、これについても「二重ループだから2次元」という理屈に合うものである。
たとえばこれを3Dのグラフィックスに応用するとすれば、3重ループをつくることで3次元の「アホ」を描くこともできる。
この理屈はループの入れ子の深さがいくつであっても適用できるので、3重以上の入れ子になったループについてもそれを「n次元」とすることができる。
ただしここでの「n次元」というものは、いわゆる「物理空間」を指すわけではない。コンピューター・グラフィックスによって3D空間を描画した、としても、それは2次元であるディスプレイ上に”3次元空間に見える”ものを描いたものに過ぎない。
なので、「4重ループを作ったからといって4次元空間を作り出すことでタイムマシンが可能だ!」ということはない。そういうことを言うやつには4重ループの「アホ」を贈ろう。