行列をダイナミックに指定することはできますか?

行列のサイズを変数で指定することはできません。また、行列をクリアし、行列が使用しているメモリを解放するコマンドもありません。

長さの異なる引数リストをシミュレートするにはどうすればいいですか?

プロシージャを定義する場合、必要なデータ型の配列として引数を宣言します。

コールする場合は、同じデータ型の配列変数を使用します。配列エクスプレッションの表記を使用し、変数を宣言して割り当てをすべて実行せずに、配列を作成することもできます。

例:

proc foo ( float $f[], string $s[]) {
 print("size of f=" + size($f) + "\n");
 for ( $i=0; $i < size($f); ++$i ) {
 print("f[" + $i + "]=" + $f[$i] + "\n");
 }
 print("size of s=" + size($s) + "\n");
 for ( $i=0; $i < size($s); ++$i ) {
 print("s[" + $i + "]=" + $s[$i] + "\n");
 }
 }
 float $ff[2]={0.9, 1.2};
 float $gg[];
 for ( $i=0; $i < 10; ++$i ) {
 $gg[$i] = $i;
 }
 foo $ff {}; // passes the array "$ff" and the empty array to foo.
 foo $gg {"hello", "world"}; // passes the array "$gg" and an array of 2 strings
 // to foo.
 foo {} {}; // calls foo with 2 empty arrays.

配列エクスプレッションでは、リストの第 1 要素のタイプがベース タイプになります。配列エクスプレッションを特定のタイプにするには、第 1 要素をそのタイプにします。

foo {(float)1, 2, 3} {"hello"};
// make first array an array of float, not int.