変数とはなにか

ビスケットには変数はありません.変数がないのでとてもまともなプログラムなんて組めないと思われるのも仕方がありません.ところが,これまでいろいろとみてきたビスケットのプログラムでは,変数を使っていないにもかかわらず,想像以上に高度なプログラムがつくられています.

変数とはなんでしょうか.何のために必要でしょうか.

手続き型言語では,状態を保持する仕組みのために変数を使っています.というか変数以外に状態を表現する方法がありません.

Prologのような論理型言語や,関数型言語では変数は状態を保持するというよりも,値を参照するためにあります.変数というのは値が変化する数という意味ですが,これらの言語では一度値が決まると他の値に変わることがありません(単一代入という言い方をします).数学での変数と同じです.数学の変数に慣れている人が,値を代入してどんどん変化してしまう手続き型の変数に戸惑うという理由もよくわかります.

値が変化する変数は人間にもわかりにくくバグが発生する原因になりますし,なによりコンピュータがそれを扱う際にも難しいということで,プログラミング言語の歴史からすると,それを使わないようにする方向に発展してきました.その一つが論理型言語であり,関数型言語なのです.

値が変化しない変数は本当に普通の変数です.たとえば,2乗するというプログラムを考えます.2乗というのは同じ数をかける,ということですから,

f(x) = x*x

となります.ここでxは何か特定の値に決まった後は値が変化することがなく,その値を使って計算が行われます.という説明がそもそも変ですよね.

値が変化する変数の方が特殊なのです.ところが,プログラミングを学ぶということが,その特殊な変数の使い方を覚えることだ,となってしまっているのは問題があります.

ビスケットには変数がありません.ではどうやって状態を表現するのでしょうか.

それは画面上の絵の配置です.絵があるか無いか,絵がいくつあるか,絵と絵の位置関係はどうなっているか,それらがすべてコンピュータの状態となっています.

手続き型言語でのプログラミングで大変なのは,変数が値が変化するので,いまどの値になっているのかを一つ一つ追っかけてゆくことにあります.変数の値がぱっと見えないのでとても面倒ですし,間違えやすいです.

それに対して,ビスケットでは画面を見ればそのまま状態を表していますし,画面に好きなように絵を並べればすぐにどんな状態でも作り出してしまうことができます.前に書いた「見えるものがすべて」という思想に基づいています.

教育を中心に考える人たちは,習得が難しいことがあった場合に,どうやってそれを教えるのがよいのか,教え方を工夫します.それはそれで素晴らしいことです.

一方で,研究と教育の両方に軸足を置いている人は,習得が難しいことがあった場合,それを習得しなくてもいい選択肢があるかどうか,まずはそれを考えます.

教育の対象が大学生と小学生の違いもあります.小学生の場合,研究が進む余地がもっとありますから.

シェアする

  • このエントリーをはてなブックマークに追加

フォローする