繰り返し専用電卓

EXCELのような表計算を繰り返し電卓として使ってましたが,Google ドキュメントの拡張機能で荒木さん(日本テセレーションデザイン協会)がちゃんと動くものを作ってくださったので,ご紹介します.

1行目の「数」「二乗」というのはこの列につけられた名前です.2行目は繰り返す式を書きます.ここでは簡単な方から説明しますが「二乗」の列の繰り返す式は「数 * 数」です.で,9列目からは自動的に計算されるエリアになります.たとえば,数の列が5のところ(13行目)では二乗の列は25になっています.

この白いエリアは無限にスクロールすることができて,

のように,大きな数の2乗がその場で計算されています.ここはスクロールするごとに見えた部分だけ計算されます.

さて,「数」の列はどうやっているかというと2行目の式の欄には「数’ + 1」というのが入っています.この「数」の次にダッシュがつけられてますが,これが重要で「一つ前の数」という意味です.つまり「一つ前の数に1を足す」のがこの数ということになります.

よくある手続き型言語の式だと

数 = 数 + 1

と書きますが,これに相当します.ここでは「数」は変数で,その変数の箱の中身が新しい値に変わる,という動きをしますね.手続き型言語がどうして難しいかというと,変数の値が変化するからです.数学で使われる変数は一度値が決まるとその値に固定されますが,手続き型言語では変数の値がどんどん変化します.

この手の言語の変数は,数学の変数を持ってきたというよりも,メモリーの番地に名前を付けて分かりやすくした,と考えるべきもので,こんなものを変数と呼んでしまったことが,混乱の原因かもしれません.プログラミングで最初に出てくる変なところで,大きな段差です.

で,当然プログラミング言語の進化の方向としては,もっとましな(数学的な変数と一致する)変数を使う方向になってきます.その方がプログラムの間違えは激減しますし,分かりやすくもなりますから(コンピュータサイエンスでは,破壊代入と単一代入という言い方で区別しています.単一代入が一度代入したらもう代入できないというものです).

で,この繰り返し電卓(れん卓)は,繰り返しの1回が1行に相当するので,繰り返した数だけ行が増え,変数(メモリー)も使いまわさずに,どんどん新しく追加されるようになっています.

繰り返しの各ステップがそれより前のステップの影響を受けない場合(例えば,数の二乗を求める)は単にそこの式を書けばよいですし.前の影響を受ける場合は前の値を取り出す方法としてダッシュが用意されている,ということです.

もうひとつ重要なことがあります.前のステップの影響を受けるということは,繰り返しを始めるときに,何から始めるかを決めなきゃないということでもあります.この「数」の列では8行目の緑のところに0が入っています.最初は0からスタートして,その後,それに1を順に足してゆくということになります.

さらに例を追加してみました.

二乗の和は,その数までの二乗の合計を求めるものです.例えば3のところは,1の二乗と2の二乗と3の二乗を合わせたもの(1+4+9)で14になります.

その次のFIBはフィボナッチ数列というもので,一つ前と二つ前の数を足したものになります.最初に1と1でスタートすると,次は1+1で2,その次は1+2で3,その次は2+3で5になります.

最後のFACTは階乗を計算しています.一つ前のFACTに数をかけています.

この繰り返し電卓ですが,これも一つのプログラミング言語です.前の投稿「何を繰り返すかが大事」では,繰り返しを,いつ繰り返すか,いつ繰り返しを終えるか,何を繰り返すかに分けましたが,この言語もビスケットと同じで,いつ繰り返すか,いつ繰り返しを終えるかというのを省略して,何を繰り返すかだけを記述すればよいことになっています.

思想的にビスケットと同じです.コンピュータが高速化したときの電卓とはどういうものになるべきか,一つの提案ですね.

リンクにだれでも触れるようにしましたので,使ってみたい方はこのドキュメントをコピーしてから編集してください.

荒木さんご自身は,もっとすごい数列の例を沢山お作りになってます.後日ご紹介しましょう.荒木さん,ありがとうございました.

シェアする

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

フォローする