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スタイルのメッセージパッシングで行なわれるが、これについては次回に。

*1:ML系の言語も再帰関数の定義にはrecを前置する必要があるみたい。