Elmで青春のフラクタルを描画する【Elmアドベントカレンダー2014 6日目】
これはElm Advent Calendar 2014の6日目です。
Elmの優れた点と言えば、
などがまず挙がるでしょう。しかし、
- 図形描画ライブラリ
も、実はElmの長所の一つなのです。
Elmの図形描画機能
まずは 公式サイトの例をご覧ください。
HTML5のCanvasは、JavaScriptによる手続き型の実装を前提にしていたので、コマ毎にclearRectで消去したり、save/restoreで状態を管理したりする必要がありました。プログラマーはともかく、「学校で習った図形を書いてみよう」と言う場合にはやや非直感的です。
一方Elmでは更新処理自体はElmがやってくれます。
また、図形はForm
という「図形そのもの」を表す型として、
図形の移動や拡大縮小はmove
scale
といった関数として、自然に表現できます。
なお、注意点とがあり、collage w h forms
でw×hのキャンバスを作ったとき、原点はキャンバスの中心で、Xが大きくなるほど右、Yが大きくなるほど上の座標です。つまり、数学と同じ座標なのです。
フラクタルを書いてみる
図形が描ける、ならば初めにフラクタルを描くものと相場は決まっています。再帰呼出し&縮小+移動で、シェルピンスキーのギャスケットを描画してみました!
n = 0
では単なる三角形を、n > 0
では自分自身の縮小コピー×3を描画しています。
なお、Elmでは小さすぎる図形(1ピクセル未満?)は描画してくれないらしく、上の例で再帰が深すぎると何も表示されなくなりました。
自分語り&妄想:Elmは未来の十進BASIC
フラクタルを書いていると、十年前私がまだ紅顔の少年だった頃を思い出します。
私がプログラマーになったのは図書館から↓の本を借りたのがきっかけでした。
パソコンを遊ぶ簡単プログラミング―コンピュータを自由に操る「十進BASIC」入門 CD-ROM付 (ブルーバックス)
- 作者: 木村良夫
- 出版社/メーカー: 講談社
- 発売日: 2003/01/20
- メディア: 新書
- クリック: 7回
- この商品を含むブログ (2件) を見る
当時は悪名高いMicrosoft Visual Basicがボロクソに言われつつも全盛の時代でしたが、十進BASICはVBとは全く別の"Full Basic"という規格に沿った教育用BASIC環境でした。
教育用だけあって
と、初心者用の機能が充実しているだけではなく、
- 数値は10進小数がデフォルト(2進数モードもある)
- 10進1000桁モード(数値型が小数点以下1000桁まで格納可能になる)
- 有理数モード
- 複素数モード
- 強力な図形描画機能
- function文とは別に、図形を定義するpicture文がある
- scale, rotate, shift, 任意のアフィン変換, それらの合成変換
- グラフ描画用関数
- 図形関連の豊富なExample(含シェルピンスキーのギャスケット)
等など、数学用の機能がとても充実していました。
言うまでもなく、構造化プログラミングにも対応しており、良いプログラミングを教われなくなったり、完膚なきまでに壊れることもありませんでした。
さすがに今では、プログラマー志望の高校生にはPythonあたりを薦めます。 でも、数学者・科学者志望だけどプログラミングの素養を身につけたい高校生ならば、今でも10進BASICを薦めたいと思います。(高校生の知り合いはいないけど)。
一方Elmですが、Playground、デバッガ、図形ライブラリなどは既にかなりの充実度です。 このまま発展すれば21世紀版・十進BASIC的な地位に着けるのではないか? と、ガスケットを書いていて思いました。
あとがき
おかげさまでElm Advent Calendar 2014は今のところ途切れず続いていますが、まだまだ空きがあります。ふるってご参加ください。
- 作者: 白井豊
- 出版社/メーカー: ゆたか創造舎
- 発売日: 2009/09/05
- メディア: 単行本(ソフトカバー)
- クリック: 9回
- この商品を含むブログを見る