2011年4月16日土曜日

またつまらないものを作ってしまった

あー、新学期が5月からになってしまい、呆けているこすげです

キラカフェでの放射線の話も終わって、当面の目標がなくなってしまったのを、これ幸いに力一杯呆けているわけですが、またつまらんものを作ってしまいました。

いや、はじめは、まじめに実用品を作っていたんですね。学生の実習課題の管理システムなんですけど。。。それがなぜか、いつの間にか、algolAlpha ってプログラミング言語のバージョンアップを始めてしまって・・・
あ、algolAlphaってのは、表向き「教育用プログラミング言語」なんですけどね。それは表向きであって、、実際は怪しい実装満載のとてつもなく危険なプログラミング言語なんですな
まず、怪しい実装というのは、ソースコードの見た目、フツーの癖のない構造化言語なんですけどね。実は要素が、演算子として実装してあってですな。関数が存在しない(笑
で、とてつもなく危険というのは、データとプログラムの差がない。データがフツーに実行できちゃう訳ですな(爆笑。だからalgolAlphaにalgolAlphaのプログラムを書かせて、それが実行できちゃう自己増殖型。。。あまりの恐ろしさに門外不出にして、息子が成長するまで封印して・・・、おお、ついに「一子相伝のプログラミング言語」ができてしまったと。言語の名前も algolAlpha とか洋風の名前じゃなくて、「北斗真語」とかすればよかったかなと妄想に浸ることしばし。そういえば algolAlpha の Alpha ってうちの息子の名前(有羽 - アルファ)から取ったというか、わはは、思いっきり趣味に走った名前ですな。そういえば、algolAlphaのソースコードの一番はじめのコメントには「神は言った、まず、値あれ」とか、「演算子は知っている」なんて、怪しげなコメントがついていたりします(笑。

で、そんなこんなしているうちに、こんどは、やっぱり以前作った教育用のプログラムである Nuclear Robot Kaffir(原子力ロボットカフィール)の改造を始めてしまいました。もともと、Nuclear Robot Kaffir は、迷路中のロボットを出口まで誘導するプログラムを書いて、プログラムの制御構造が学べるよ~ん、ってモンだんだんですけどね
ええと、これ、僕が1993年にうちの学校の体験入学にために作ったんですけど、コンセプトがぱくられまくりで、あ、コンセプトをぱくるのは全く問題ないんですけどね、ぱくった物が「劣化コピー」ばかりで、かなーり不愉快な思いをしました。「ぱくるならオリジナルを超えろよ」って言いたいんですけどね。で、悪貨に良貨は駆逐されちゃったというか、自ら身を引いちゃったわけです

で、そんで、作り直したのは、迷路を誘導するわけじゃなくて、逆に軌跡を描いて遊ぶプログラムにしちゃえということで、プログラミング言語の構造としてスタック型の物を採用しました。それと同時に、継承とか多態性とかのオブジェクト指向的な要素と、メソッドの再帰呼び出しも(スタック型の言語だから当然)できるようにして脳内設計して作り出したんですけど、これもできてしまいました。


上は、代表的なフラクタル図形であるコッホ曲線で作った、コッホ雪片を描かせている動画で、下は僕が勝手に「無限の3分木」と呼んでいる図形を描かせたものです


いやー、実はアプリケーションに与えるプログラムがバグっているので、左から風が吹いて来ちゃっているんですけど(大笑。でも、結構気に入っていたりするので載せちゃいます
コッホ曲線のプログラムは、けっこーシンプルで

def   execKoch
<2> plus setLimit
EAST turnTo
<-75, 40> moveTo
<50> Koch <-120> turn
<50> Koch <-120> turn
<50> Koch <-120> turn
enddef

def Koch
$ISLIMIT KochLine
dup <3> div
Koch <60> turn
Koch <-120> turn
Koch <60> turn
Koch
dispose
enddef

def KochLine
dup forward <60> turn
dup forward <-120> turn
dup forward <60> turn
dup forward
enddef
こんな感じ。これを定義した後、コンソールから「<次数> execKoch」と入力すると、指定した次数のコッホ雪片を描いてくれます。命令は、まあ、見る人が見ればどんな動作をするのか分かっちゃうと思うので、勝手に想像してください

という訳で、「またつまらない物をつくってしまった」というお話でした。

0 件のコメント:

コメントを投稿