# macr2lst

リスト変換用の関数

## 呼び出し手順

    [txt]=macr2lst(function-name)

## 説明

このプリミティブは,コンパイル済みのScilab関数 `function-name` を,関数の内部表現をコード化(逆ポーランド表記)したリストに変換します.

リストの最初のエントリは関数名,2番目および3番目のエントリは それぞれ左辺引数および右辺引数の変数名となります. それ以降のエントリは,基本的な演算子レコードもしくは if, for, ... のような制御構造の階層を含むリストのどちらかです.

基本的な演算子レコードは, 文字列ベクトルにより記述されます. その最初の要素はオペコードを表します.

オペコード | 意味 | パラメータ
"0" | 無視されるオペコード | なし
"1" | 使用停止 |
"2" | 変数または関数リファレンス | 変数名, #rhs, #lhs
"3" | スタック内に文字列を配置 | 文字列
"4" | スタック内に空の行列を配置 | なし
"5" | 処理を適用 | 処理コード, #rhs,#lhs
"6" | 数値をスタックに配置 | 数値
"12" | 停止コマンド | なし
"13" | ブレークコマンド | なし
"14" | 中断コマンド | なし
"15" | 行終端記号 | なし
"17" | quit コマンド | なし
"18" | 名前のある変数 | 変数名
"19" | 再帰的な添え字構造を作成 | パスの長さ, 最終添え字の番号
"20" | 関数コール | 関数名, #rhs, #lhs
"23" | 名前を指定して変数を作成 | 変数名
"24" | 0型の変数をスタックに代入 | なし
"25" | プロファイル用レコード | コール数, 消費時間
"26" | 文字列ベクトルをスタック内に配置 | #rows, #columns, 要素のシーケンス
"27" | 組み込みリファレンスをスタックに配置 | インターフェイス番号, インターフェイス内の位置, 関数名
"28" | continue コマンド | なし
"29" | 代入 | #lhs, 表示モード, (変数名, #rhs)*
"30" | 論理値式 省略形 | 型, ジャンプの長さ
"31" | コメント | コメント
"99" | return コマンド | なし
> "100" | 組み込みコール (古い) | 100*fun, #rhs, #lhs, fin

fun2string 関数は, 初期コードを生成する際に使用できます.

## 例

    //DISPLAY
    function y=foo(x,flag)
      if flag then
        y=sin(x)
      else
        y=cos(x)
      end
    endfunction
    L=macr2lst(foo)
    fun2string(L)

## 参照

- macrovar
- fun2string
- macr2tree
- tree2code