Scalaで俺言語作る。

クロージャになってて、マクロも使えるかんじになってます。
配列やら、ループやら、なんやら足らないものも多いですけど、ほとんど、
多値とパターンマッチだけで、いろいろ出来て楽しいです。
http://gist.github.com/46417

クロージャ
c=(fun(){c=1;fun(){c=c*10}})();c()+c()+c()
で、1110が返る

ブロックを受け取る関数
関数fが引数をn個受けとるときに、関数呼び出しの後ろに{}があると、
そこのブロックが最後の引数として渡される。
例)
f=fun(a,block){if(a)block() else -1} f(1){print('ok)} a(0){print('ng)}

'ok

  • 1

となる

マクロ mac(パターン)展開式
マクロは実行前にパターン内でプログラム内をマッチングし、パターンにマッチしたら
展開式部分を実行して結果をプログラムに埋め込む

mac(hoge)3 hoge -> 3
シンボル 'a と 'b にマッチして、a-bを読み込み時に計算して5を返している

また、シンボルを使うことで、引数を使うことが出来る。
例)
mac(sub('a,'b))a-b sub(10,5) -> 5

自作のif文を作るときは以下のようにするとうまくいかない
mac(myif('a){'b})if(a)b myif(3){5} -> 5
これだとよさそうだけど、
mac(myif('a){'b})if(a)b f=fun(c){myif(c){5}} a(0) ->5

になる、なぜかというと、マクロは展開時に実行されるため
f=fun(c){5} a(0)と展開されているためです。

そこで、クアシクォートとアンクオートを使って以下のように書くとうまくいきます。
mac(myif('a){'b})qq{if(uq{a})uq{b}} f=fun(c){myif(c){5}} a(0) ->5
といったかんじのことができるようになりました。

Scalaで音楽を鳴らす。wonderflでFM音源鳴らしてるのをScalaに移植してみたと。

AS3だと、遅延がひどい気がするのだけど、ScalaというかJava Soundだとその辺はコントロール
できるのでいいかんじです。
MMLのパースもScalaなら綺麗にできるぞと。ついでにちょっとしたコンパイルもしてみてるぞと。
http://freecluster.net/scala/osc.html

Scalaでゲーム。

といっても、ゲーム性がまだいまいちなのだけど、、、。
いちお、弾幕よけるゲームになってて、敵キャラはねこび〜ん@金子うんたらコモンなんたらです。
Scalaでちゃんと、アプレット作って音も鳴るぜ、ベクターデータだぜと。
http://freecluster.net/scala/game.html