# mlist

Scilab オブジェクト, 型付リスト定義に向いた行列.

## 呼び出し手順

    mlist(typ,a1,....an )

## パラメータ

typ

  文字列のベクトル

ai

  任意のScilabオブジェクト (`matrix, list,string...`).

## 説明

`mlist` オブジェクトは tlist オブジェクトに 非常に良く似ています. 唯一の差異は, 展開 および insertion 挿入の構文です: `M` が mlistの場合, フィールド名でない `i` に関して, `M(i)` はリストの `i`番目のフィールドではありません.

展開および挿入の構文の意味付けは, overloading 関数で指定される必要があります.

overloading 関数の展開構文 `b=a(i1,...,in)` は以下の呼び出し手順となります : `b=%<type_of_a>_e_(i1,...,in,a)`

そして構文 `[x1,..,xm]=a(i1,...,in)` は以下の呼び出し手順となります: `[x1,..,xm]=%<type_of_a>_e_(i1,...,in,a)`

挿入構文に関連する overloading 関数 `a(i1,...,in)=b` は以下の呼び出し手順となります: `a=%<type_of_b>_i_<type_of_a>(i1,...,in,b,a)`.

mlist フィールドはそれらの名前に基づき設計される必要があります. `getfield` および `setfield` 関数により処理することも可能です.

## 例

    M=mlist(['V','name','value'],['a','b';'c' 'd'],[1 2; 3 4]);
    //define display
    function %V_p(M),disp(M.name+':'+string(M.value)),endfunction

    //define extraction operation
    function r=%V_e(varargin)
      M=varargin($)
      r=mlist(['V','name','value'],M.name(varargin(1:$-1)),M.value(varargin(1:$-1)))
    endfunction
    M(2,:) // the second row of  M
    M.value

    //define insertion operations
    function M=%V_i_V(varargin)
      M=varargin($)
      N=varargin($-1)
      M.value(varargin(1:$-2))=N.value
      M.name(varargin(1:$-2))=N.name
    endfunction
    M(1,1)=M(2,2)

    function M=%s_i_V(varargin) //insertion of a regular matrix into a V matrix
      M=varargin($)
      N=varargin($-1)
      M.value(varargin(1:$-2))=N
      M.name(varargin(1:$-2))=emptystr(N)
    endfunction
    M(1,1)=44

    //tlist case
    M=tlist(['V','name','value'],['a','b';'c' 'd'],[1 2; 3 4]);
    M(2)
    M(2)='a'+string([1 2;3 4])

    M('name')

## 参照

- tlist
- list
- overloading
- getfield
- setfield