mlist объект Scilab'а, определение матричноориентированного типизированного списка

## Синтаксис

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

## Аргументы

typ

  вектор символьных строк.

ai

  любой объект Scilab'а (матрица, список, строка, ...).

## Описание

Объект mlist очень похож на объект tlist. Единственное отличие касается синтаксиса выделения и вставки: если `M` является `mlist`'ом, то для любого индекса `i`, который не является именем поля, `M(i)` более не является `i`-тым полем списка.

Семантика синтаксиса выделения и вставки должна задаваться функцией перегрузки.

Функция перегрузки для синтаксиса выделения `b=a(i1, ..., in)` имеет следующую последовательность вызова: `b=%<тип_a>_e_(i1, ..., in, a)`.

и синтаксис `[x1, ..., xm]=a(i1, ..., in)` имеет следующую последовательность вызова: `[x1, ..., xm]=%<тип_a>_e_(i1, ..., in,a)`.

Функция перегрузки, связанная с синтаксисом вставки `a(i1, ..., in)=b` имеет следующую последовательность вызова: `a=%<тип_b>_i_<тип_a>(i1, ..., in, b, a)`.

Поля `mlist`'а должны тогда обозначаться по их именам. Они также могут обрабатываться с помощью функций `getfield` и `setfield`.

## Примеры

    M=mlist(['V','name','value'],['a','b';'c' 'd'],[1 2; 3 4]);

    //определение вывода на экран
    function %V_p(M),disp(M.name+':'+string(M.value)),endfunction

    //определение операции выделения
    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,:) // вторая строка  M
    M.value

    //определение операции вставки
    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) //вставка обычной матрицы в матрицу V
      M=varargin($)
      N=varargin($-1)
      M.value(varargin(1:$-2))=N
      M.name(varargin(1:$-2))=emptystr(N)
    endfunction
    M(1,1)=44

    // в случае tlist'а
    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
- перегрузка
- getfield
- setfield