ビスケットでソートとかカウンターとか基本的な仕組みが作れることはわかったのですが,それらを組み合わせて大きなシステムが作れるのかというと,どうもそんな気がしませんね.何かが決定的に足りないのです.その1つがポインタです.今のビスケットにはポインタはありません.将来,導入が予定されています.
ポインタというのは何かというと,コンピュータの原始的な段階で,単なる自動的に計算する機械から,1つ上のレベルで考えることが出来るようになったという極めて画期的な発明です.まずはその解説から.
40名のクラスがあって,その中のある二人を選んだら,その二人から別なもう一人を決める方法を考えます.同じ二人のペアでは毎回同じ人が決められます.変な問題ですみません.生徒には出生番号というのがあって,1番から40番まで決められています.二人の出席番号をX番とY番,そこから決められる人はZ番だとすると.
Z = f(X, Y)
というXとYで何か計算をしてZが決まる関数fを作ればよい,ということになります.fはいろんな形があると思いますが,これは数学のブログではないのでこれ以上は触れません.
さて,1から40までの数の計算をすることですが,元々は人間の話でした.田中さんと吉田君が選ばれたら,そこから決められる人は佐藤さん,という話でした.元々は人間の話だったのに,出席番号というのを使ったおかげで,数の計算にすることができた.ここが画期的なんです.
コンピュータにはメモリーというのがあって,その中に数字がずらっと入っているわけですが,メモリーの1つ1つにも番地という出席番号のようなものが付けられています.コンピュータは数字の計算ができますけれど,その計算結果をメモリーの番地とみなして,その番地に入っている別の数字を取り出して,次の計算に使います.別のたとえで言うと,脳外科のお医者さんが自分の脳の手術をやっている感じです.数字が名前になるというのがそういうことなんですね.これでOSが作れるようになったし,新しいプログラミング言語も作れるようになった.極めて重要な仕掛けです.
ビスケットの場合メモリーというのは画面そのもので,番地は画面の位置になります.なのでポインタに相当する機能は画面上の離れた場所を指し示す方法ということになります.
たとえば,トラックの荷台に箱を積んで走る.というプログラムを考えます.トラックの絵と,箱の絵があります.このとき,箱の中に何が入っているか.いろんなものを入れたいですが,それらの中身をトラックと一緒に絵の動きで動かすのは大変ですね.すべてのパターンを作るわけにも行かないし,他のトラックとぶつかって,荷物を落としてしまったりしそうです.箱の中はトラックの動きとは別の場所に置いておきたいです.
ビスケットに導入される予定のポインタは2つの絵が組になってます.始点と終点の絵です.始点は箱の形をしていて,終点は箱の中身を示す形をしています.終点の絵の上に箱に入れたい荷物を重ねて置きます.トラックには始点の絵を積んで走ってもらいます.それで,たとえばどこかのステーションに付いたら,トラックに積まれている荷物を降ろして,ステーションでカウントするとか.箱を4つ作って,この箱には何をいれて,こっちの箱には何をいれて.それでそれぞれの箱を4台のトラックに積んで,この荷物をいれた箱は上に向かって走る.こっちの箱は斜め右上に向かって走る.そんな風にも使えます.
メモリー(画面)が一枚の平坦なものだったのが,トラックが走る世界と,箱の中の世界の2つに分かれたということもお気づきでしょうか.トラックが走っているうちに,別のトラックの荷物の中に入ってしまうこともあるかもしれません.落語の頭山の世界です.そういうレイヤーの違う世界が混ざってしまうのを面白がるのもありますけれど,一方で画面を複数枚用意して,それぞれの動きは混ざらないようにして,ポインタは別の画面間に置くという方法もあると思います.これでかなり複雑なプログラムを作って行けますね.1枚の画面の方は昔のCPUの直接触っていたのと同じ,複数の画面でやる方は高級言語で作っているという違いもわかると思います.
ポインタがあると,スタックが作れるので,再帰的な動きをさせることもできるようになると思います.いろいろなアルゴリズムのアニメーションも作れるようになります.
ポインタというのは何かというと,コンピュータの原始的な段階で,単なる自動的に計算する機械から,1つ上のレベルで考えることが出来るようになったという極めて画期的な発明です.まずはその解説から.
40名のクラスがあって,その中のある二人を選んだら,その二人から別なもう一人を決める方法を考えます.同じ二人のペアでは毎回同じ人が決められます.変な問題ですみません.生徒には出生番号というのがあって,1番から40番まで決められています.二人の出席番号をX番とY番,そこから決められる人はZ番だとすると.
Z = f(X, Y)
というXとYで何か計算をしてZが決まる関数fを作ればよい,ということになります.fはいろんな形があると思いますが,これは数学のブログではないのでこれ以上は触れません.
さて,1から40までの数の計算をすることですが,元々は人間の話でした.田中さんと吉田君が選ばれたら,そこから決められる人は佐藤さん,という話でした.元々は人間の話だったのに,出席番号というのを使ったおかげで,数の計算にすることができた.ここが画期的なんです.
コンピュータにはメモリーというのがあって,その中に数字がずらっと入っているわけですが,メモリーの1つ1つにも番地という出席番号のようなものが付けられています.コンピュータは数字の計算ができますけれど,その計算結果をメモリーの番地とみなして,その番地に入っている別の数字を取り出して,次の計算に使います.別のたとえで言うと,脳外科のお医者さんが自分の脳の手術をやっている感じです.数字が名前になるというのがそういうことなんですね.これでOSが作れるようになったし,新しいプログラミング言語も作れるようになった.極めて重要な仕掛けです.
ビスケットの場合メモリーというのは画面そのもので,番地は画面の位置になります.なのでポインタに相当する機能は画面上の離れた場所を指し示す方法ということになります.
たとえば,トラックの荷台に箱を積んで走る.というプログラムを考えます.トラックの絵と,箱の絵があります.このとき,箱の中に何が入っているか.いろんなものを入れたいですが,それらの中身をトラックと一緒に絵の動きで動かすのは大変ですね.すべてのパターンを作るわけにも行かないし,他のトラックとぶつかって,荷物を落としてしまったりしそうです.箱の中はトラックの動きとは別の場所に置いておきたいです.
ビスケットに導入される予定のポインタは2つの絵が組になってます.始点と終点の絵です.始点は箱の形をしていて,終点は箱の中身を示す形をしています.終点の絵の上に箱に入れたい荷物を重ねて置きます.トラックには始点の絵を積んで走ってもらいます.それで,たとえばどこかのステーションに付いたら,トラックに積まれている荷物を降ろして,ステーションでカウントするとか.箱を4つ作って,この箱には何をいれて,こっちの箱には何をいれて.それでそれぞれの箱を4台のトラックに積んで,この荷物をいれた箱は上に向かって走る.こっちの箱は斜め右上に向かって走る.そんな風にも使えます.
メモリー(画面)が一枚の平坦なものだったのが,トラックが走る世界と,箱の中の世界の2つに分かれたということもお気づきでしょうか.トラックが走っているうちに,別のトラックの荷物の中に入ってしまうこともあるかもしれません.落語の頭山の世界です.そういうレイヤーの違う世界が混ざってしまうのを面白がるのもありますけれど,一方で画面を複数枚用意して,それぞれの動きは混ざらないようにして,ポインタは別の画面間に置くという方法もあると思います.これでかなり複雑なプログラムを作って行けますね.1枚の画面の方は昔のCPUの直接触っていたのと同じ,複数の画面でやる方は高級言語で作っているという違いもわかると思います.
ポインタがあると,スタックが作れるので,再帰的な動きをさせることもできるようになると思います.いろいろなアルゴリズムのアニメーションも作れるようになります.