объект Scilab'а, определение матричноориентированного типизированного списка
mlist(typ, a1, ..., an)
вектор символьных строк.
любой объект 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') | ![]() | ![]() |