ビスケットで再帰図形を書いてみたいと思います.再帰図形というのはこういうものです.プログラミングの入門の例題としてよく出てくるあれです.
再帰というのは繰り返しの一種ですが,ただのループとは違って自分自身を包み込むような感じの繰り返しです.例えると,卵が横に10個並んでいる状態をただのループだとすると,再帰は卵の中に小さい卵が入っていて,その中にさらに小さい卵が入っていて,というマトリョーシカのイメージです.
マトリョーシカ卵も,中に入る卵が一つずつなら普通な感じなのですが,2つずつ卵が入っていたらどうなるでしょう.つまり,卵を割ると,中から小さい卵が2つ出てきます.それぞれの卵を割ると,さらに小さい卵が2つずつ出てきます.これで卵が4つになったわけですね.こんな感じで割ると2倍ずつ増えて行きます.こういう増え方が再帰の面白いところです.
ところが,プログラミング言語に詳しい方ならお判りでしょうが,ビスケットには再帰を表現する仕組みがありません.ではどうやって再帰図形を作るのでしょうか.
最近のビスケットプログラミングの流行は,変数を使って一般的に書かれたプログラムをベタなメガネに展開するということです.この方式でテトリスやオセロのように作るのが難しかったプログラムが大量なメガネによって作れるようになったのでした.今回の再帰図形も再帰の段階をベタな絵に展開します.メガネが膨大になりそうなんですが,実はそうでものないのです.
まずは,小さめに矢印を描きます.
つぎに矢印と同じくらいの長さで棒を描きます.
矢印が緑の棒に変わるというメガネを作って,ステージには矢印をおいてみると.
すると,矢印は緑の棒に変わりますね.
次に,少し長い矢印を描きます.これから少しずつ矢印を長くしてゆくのであまり一気に長くしないようにしましょう.
つぎに同じような長さの棒を描きます.さっきと違う色でも同じ色でもどちらでも楽しいです.
メガネは,この矢印から赤い棒と棒の先に小さい矢印を3つ斜めにして付けるというものです.
これで,この矢印をおいて走らせると,
まずは赤い棒と小さい矢印3本が現れて,小さい矢印はそれぞれ緑の棒に変わります.
同じようにして,さらに少し長い矢印と同じ長さくらいの棒を描いて,同じような矢印が棒とそれより小さい矢印3つに変わるというメガネを作ります.
これを動かすと,途中で
のようになって.
となります.
毎回ステージにおく矢印は一番大きなものに置き換えてます.
この調子で,少し長い矢印と棒を描いては,似たような配置のメガネを作る,という作業を続けて行くと,このようになります.
綺麗な木になりましたね.
これらのメガネをよくみてください.最初の一番小さい矢印以外は,全部ほとんど同じような形をしています.矢印の開き方が大きくなるに従って開くようにしてます.
5段の再帰でしたがメガネが5つで作れました.段数を増やすためには,その段数分の絵を描いて,メガネを増やす必要があります.一方,再帰ができるプログラミング言語では,この同じ種類のメガネを変数か何かの方法でまとめて記述して,一つのメガネで済むようにしています.変数が使われている分だけ理解が難しくなりますが,無限の段数でも動かすことができる能力を持っています.
枝の先に花を咲かせることもできます.
最初のメガネに花を追加しただけで,全ての枝の先に花が咲きます.
この制作過程は再帰を学ぶ前段階として,再帰というのがどういうことなのか体験するツールとして使えると思います.
小学生でもワークショップでマトリョーシカ卵を作る子供が必ずいます.作業自体は簡単ですので,小学生にも再帰という言葉は難しくても,こういうプログラムを作ってもらうのは可能です.再帰の概念に触れた子供は世の中がどのように見えるようになるのでしょう.
他にも作ってみました.大きな矢印がそれより一つ小さい矢印でコの字を作るというものです.
最初はここから始まって,
ちょっと重なっているところがあったり,繋がっていないところがあったりして,微調整が必要ですね.
どうでしょうか.ビスケットでこんな図形が描けるとは思ってもいませんでした.言語として再帰の能力が入っていないので,最初から諦めていました.しかし,再帰も目で見る程度でしたら5段ぐらいもあれば十分なので,展開して似たようなメガネを5つ作る,ということさえすれば,簡単につくれたのでした.