Altairスクリプト

第0.43版 2016年10月23日
第0.12版 1998年11月23日

ここでは、Altairで定義されているクラスに変更を加えることなく
動的に関数をロードし実行する機能の説明をします。

integer al_script("trans", script, opt);

文字列scriptを内部コードに変換しscriptに関連付けます。
変換に成功するとnullが返ります。

optに1を入れると変換中の途中の文字列をアウトプットウィンドウに出力します。
これは、Altairスクリプトのデバッグに使えます。

any al_script("eval", script, args);

文字列scriptに関連付けられた内部コードを実行します。
argsには、実引数の値をリストにしたものを与えます。
リスト要素の順番は、関数の仮引数の順番になります。

実行する前に、al_script("trans", script, ...);で内部コードが
生成されていなければ、実行は行われません。

any al_script("eval2", script, args);

文字列scriptに関連付けられた内部コードを名前付引数で実行します。
argsには、以下の形式のデータを与えます。
((arg_name, arg_value, null), ...)
リスト要素の引数の順番はランダムでかまいません。
arg_nameはal_gp("unique_str", ...);でアドレスを比較すればよいだけの文字列に 変換しておく必要があります。

実行する前に、al_script("trans", script, ...);で内部コードが
生成されていなければ、実行は行われません。

サンプルコード

    var string s;
    s = "public: static integer test(integer a, integer b);\n";
    s = s + "body\n";
    s = s + "{\n";
    s = s + "    return a * 10 + b;\n";
    s = s + "}\n";
    s = s + "end_body\n";
    if (al_script("trans", s, null)) {
        al_print("スクリプトにエラーがあります。\n");
        return;
    } else {
    }
    al_print(al_script("eval", s, al_list2(2, 3)));
    al_print("\n");
上記コードを実行すると23がアウトプットウィンドウに出力されます。
    var string s;
    s = "public: static integer test(integer a, integer b);\n";
    s = s + "body\n";
    s = s + "{\n";
    s = s + "    return a * 10 + b;\n";
    s = s + "}\n";
    s = s + "end_body\n";
    if (al_script("trans", s, null)) {
        al_print("スクリプトにエラーがあります。\n");
        return;
    } else {
    }
    var list arg_ls;
    arg_ls = al_cons(al_list3(al_gp("unique_str", "a", null, null, null), 4, null), arg_ls);
    arg_ls = al_cons(al_list3(al_gp("unique_str", "b", null, null, null), 5, null), arg_ls);
    al_print(al_script("eval2", s, arg_ls));
    al_print("\n");
上記コードを実行すると45がアウトプットウィンドウに出力されます。