Newsqueak (1): prog
ちょっとPlan9から横道それて、Newsqueakを調べてみる。複雑な言語じゃないので、15ページぐらいのリファレンスマニュアルに目を通せば、大体感じがつかめてくる。
まずは、プログラムの基本構成要素のprogから。progのフォーマットは、
prog(list of formals) of type { body }
で、戻り値はbecome文で指定する。制御を戻すというより、progを置き換えるというニュアンスのようだ。
次の例は、二つの引数を取って、和を返すprog。
progはlambda式っぽくて、変数にbindして、呼び出したり、
add:=prog(a:int, b:int) of int { become a+b; }; foo:=add(2,3); print(foo); 5
無名で使うこともできる。
bar:=prog(a:int, b:int) of int { become a+b; } (2,3); print(bar); 5
progを再帰呼出しする場合は、頭にキーワードrecをつける*1。
rec fact:=prog(n:int) of int { if (n==0) become 1; become n*fact(n-1); };
progの呼出しの頭にbeginを付けると、progがプロセスとして実行される。プロセス間の通信はCSPスタイルのメッセージパッシングで行なわれるが、これについては次回に。