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;