SPLの強化
DADiSP 6.5 |
---|
機能 |
6.5新機能の概要 |
リリースノート B04 リリースノート B03 リリースノート B02 リリースノート B01 |
プレスリリース |
SPLの強化
静的変数
静的変数はそれぞれの関数で一度だけ呼び出されます。静的変数は1つの特定の関数または特定のSPLファイルの中のすべての関数にローカルで定義することができます。静的変数は、それを定義した関数またはSPLファイルの中のすべての関数に対してローカル変数のように振舞います。例
sumval(x)
{
static sum = 0;
sum += x;
return(sum);
}
sumval関数は現在の入力値と過去すべての入力値の和を返します。ただし、それぞれ呼び出されるsumvalの中で静的変数sumはローカル変数として振舞います。
静的変数はファイルベースの定義になっている場合は同じSPLファイルの中のすべての関数がこの静的変数にアクセスします。 下記の例も上記の例と同じ動作をし、currsumは現在の和を返します。
// sumval.spl
static sum = 0;
sumval(x)
{
sum += x;
return(sum);
}
currsum()
{
return(sum);
}
ファイルベースのグローバル変数
グローバル変数はファイル単位で指定することができます。
// myfun1.spl
extern a = 10;
extern b = 20;
myfun1()
{
return(b);
}
myfun2(x)
{
a = x;
b = a * a;
}
c1 = myfun1();
c1 == 20;
myfun2(5);
a == 5;
b == 25;
c2 = myfun1();
c2 == 25;
変数aとbはmyfun1とmyfun2両方からアクセスできるローバル変数となります。自動的読み込みまたは明示的読み込みかによってファイルベースの外部変数はSPL関数が最初に読み込まれるときに初期化されます。
カスタムダイアログフォーム
@form と @endformのキーワードがカスタムダイアログボックステンプレートにSPLコードを同じファイルに直接埋め込むことを可能にします。ユーサーが指定した範囲とdelta X値を用いてランダムシリーズを生成する例を以下に示します。
// test.pan – ベースとなるダイアログ
@panel
@form// 定義されてなければ、範囲のdelta X値を初期化します
{defvar("_form_dlen", 1000)}
{defvar("_form_dx", 0.01)}テストメニュー
// 整数を取得する, "%" は直に値をセットします
Length: <% w{25}>~_form_dlen = <{_form_dlen}>~input(2)// 実数値を取得する, "%" は直に値をセットします
DeltaX: <% w{25}>~_form_dx = <{_form_dx}> ~input(1)
<L>// OK を押した場合、データを生成します
~form_gendata(_form_dlen, _form_dx)@endform
// SPL code
form_gendata(len, dx)
{
// format and set the current window formula
eval(sprintf("W0 := gnorm(%d, %g)", len, dx));
}
上記によって下記のダイアログボックスが作成されます。
OKボタンを押した場合、埋め込んだform_gendata()関数が実行され入力値に基づいて現在のウィンドウに数式が生成されます。
gnorm(1000, 0.001)
@endformの後に指定すれば任意のSPLコードを埋め込むことができます。
新しい 連結演算子「@@」
a = b @@ cはa = concat(b, c)のもっとコンパクトな書き方となります。
新しい付加演算子「@=」
a @= bはappend(a, b)と等価となります。@=はシリーズaの最後にシリーズbを追加します。大きなシリーズの場合、a @= bはa = a @@ bより高速となります。それは、@=が既存のシリーズにおいて動作し、@@は新しいシリーズを作成して割り当てるためです。
互換性演算子
.* (スカラーの乗算)、./ (スカラーの除算)と.'(実数の転置演算子)はMファイルコードで便利に使用できます。