MELの変数はC言語の変数に似たところがある。
しかし、全てにおいてが同じわけではないので注意が必要である。
MELの変数には以下の特徴がある。
int $x; float $y, $z; string $s = "test"; ← $s は文字列型 (C言語なら char *s = "test";)
global proc test1() { int $x; float $y = 3.5; $x = 1; $z1 = 5; ← $z1 は自動的に int になる $z2 = 2.3; ← $z2 は自動的に float になる }
global proc test2() { int $x; $x = 1; float $y = 3.5; }
int $xx[2]; float $yy[]; ← $y は配列で個数は未定 float $zz[] = {5.2, 6.1, 7.8}; ← 配列の初期化はC言語と同じ $xx[0] = 1; $xx[1] = 2; $yy[0] = 3.5; ← $yy[0] が作られて 3.5 が代入される $yy[1] = 0.3; ← $yy[1] が作られて 0.3 が代入される $yy[3] = 5.6; ← $yy[2] をとばして $yy[3] に代入可能($yy[2] は自動的に 0)
int $x1; ← 外部変数 $x1 の宣言 global proc test3() { global int $x1; ← 外部変数 $x1 を test3() 内で使う変数宣言 $x1 = 1; ← test3() の外部で宣言されていた $x1 } global proc test4() { int $x1; ← ローカル変数 $x1 の宣言 $x1 = 2; ← test4() の内部で宣言された $x1 }
int $v1; float $v2; float $v1; ← $v1 は int なのでエラー
半径を1づつ小さくしながら3個の球を接しながら並べる MELスクリプトをプロシージャーと変数を使って作ってみよう。
プロシージャーの引数(int $r)に1個目の球の半径を与えて実行すると、2番目以降の球は半径が1づつ小さくなって作られてゆく。
% cd mel % pwd /amt/home0/ad020000/mel
global proc make3Sphere1(int $r) { int $m; sphere; scale $r $r $r; sphere; $r -= 1; scale $r $r $r; $m = 2 * $r + 1; move $m 0 0; sphere; $r -= 1; scale $r $r $r; $m += 2 * $r + 1; move $m 0 0; }
global proc make3Sphere(int $r)
int $m;
sphere;
scale $r $r $r;
sphere;
$r -= 1;
scale $r $r $r;
$m = 2 * $r + 1;
move $m 0 0;
sphere;
$r -= 1;
scale $r $r $r;
$m += 2 * $r + 1;
move $m 0 0;