* Bug 16450 fixed: [double, integer] & [double ; integer] implemented
[scilab.git] / scilab / modules / core / help / ru_RU / 1_keywords / brackets.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4  * Copyright (C) 2012 - 2016 - Scilab Enterprises
5  * Copyright (C) 2016 - 2020 - Samuel GOUGEON
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  -->
15 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
16           xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML"
17           xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
18           xml:lang="ru" xml:id="brackets">
19     <refnamediv>
20         <refname>brackets [,;]</refname>
21         <refpurpose>
22             Конкатенация. Получатели присвоения. Результаты функции.
23         </refpurpose>
24     </refnamediv>
25     <refsynopsisdiv>
26         <title>Синтаксис</title>
27         <synopsis>
28             Mh = [m11 m12 m13.. m1N] or [m11, m12, m13,.., m1N]
29             Mv = [m11 ; m21 ; m31..; mN1]
30             M  = [m11, m12,...; m21, m22,...;...]
31             [r1, r2,...] = func(...)
32             [r1, r2,.., rN] = (e1, e2, .., eN)
33             [r1, r2,.., rk] = (e1, e2, .., ek,.., eN)
34             [r1, r2,.., rN] = mylist(:)
35             [r1, r2,.., rN] = S.field([i1 i2.. iN])
36         </synopsis>
37     </refsynopsisdiv>
38     <refsection role="parameters">
39         <title>Аргументы</title>
40         <variablelist>
41             <varlistentry>
42                 <term>m11, m12,...  </term>
43                 <listitem>
44                     <para>
45                         Множество объектов, предназначенных для конкатенации (и слияния: прежние 
46                         отдельные контейнеры будут удалены). Следующие подмножества типов 
47                         объектов могут смешиваться в процессе, но взаимно исключающие:
48                     <itemizedlist>
49                         <listitem>
50                             Матрицы логических, вещественные, комплексные значения, полиномы, 
51                             дробно-рациональные значения: тип данных результата конкатенации это 
52                             устанавливается правилами, определёнными ниже (см. правила <link linkend="brackets_Types_conversions">
53                             <emphasis role="italic">преобразований типов</emphasis>
54                             </link>).
55                         </listitem>
56                         <listitem>
57                             Матрицы кодированных целых чисел любого типа
58                             <link linkend="inttype">inttype</link>.
59                             <warning>
60                                 Кодированные целые числа различных типов не могут 
61                                 конкатенироваться друг с другом.
62                             </warning>
63                         </listitem>
64                         <listitem>
65                             Cell-массивы.
66                         </listitem>
67                         <listitem>
68                             Массивы структур с одинаковыми полями. Поля могут быть в разном 
69                             порядке от одного массива к другому.
70                         </listitem>
71                         <listitem>
72                             Типизированные списки типа <link linkend="syslin">syslin</link>.
73                         </listitem>
74                     </itemizedlist>
75                     </para>
76                 </listitem>
77             </varlistentry>
78             <varlistentry>
79                 <term>M, Mh, Mv</term>
80                 <listitem>
81                     <para>
82                         Матрицы с типом всех <varname>m##</varname>
83                         (если они все имеют одинаковый тип данных),
84                         cell-массивы (если <literal>mi</literal> являются такими),
85                         массивы структур (если <literal>mi</literal> являются такими).
86                     </para>
87                 </listitem>
88             </varlistentry>
89             <varlistentry>
90                 <term>e1, e2,..  </term>
91                 <listitem>
92                     <para>
93                         Входные объекты (литералы, как, например,
94                         <literal>-1.23</literal> или <literal>"abcd"</literal>,
95                         переменные или выражения, как, например <literal>a+%pi</literal>
96                         и т.д.).
97                     </para>
98                 </listitem>
99             </varlistentry>
100             <varlistentry>
101                 <term>mylist</term>
102                 <listitem>
103                     <para>Простой список.</para>
104                 </listitem>
105             </varlistentry>
106             <varlistentry>
107                 <term>S.field</term>
108                 <listitem>
109                     <para>
110                         Массив структур с полем с именем <literal>field</literal>.
111                     </para>
112                 </listitem>
113             </varlistentry>
114             <varlistentry>
115                 <term>i1, i2,..  </term>
116                 <listitem>
117                     <para>
118                         Индексы компонентов, выбранных из <varname>S</varname>.
119                     </para>
120                 </listitem>
121             </varlistentry>
122             <varlistentry>
123                 <term>r1, r2,...  </term>
124                 <listitem>
125                     <para>Выходные переменные.</para>
126                 </listitem>
127             </varlistentry>
128         </variablelist>
129     </refsection>
130     <refsection role="description">
131         <title>Описание</title>
132         <variablelist>
133             <varlistentry>
134                 <term>[] с правой стороны: конкатенаторы</term>
135                 <listitem>
136                     <para>[..] объединяют их содержимое простых и совместимых типов
137                         в единородный вектор, матрицу или гиперматрицу.
138                     </para>
139                     <note>
140                         Конкатенация по горизонтали или вертикали является двоичным итерируемым 
141                         оператором. Он исполняется пошагово слева направо и сверху вниз. Таким 
142                         образом, <literal>[1 3 5 7]</literal> исполняется как <literal>[[[1 3] 5] 7]</literal>.
143                     </note>
144                     <para>
145                         Внутри квадратных скобок,
146                         <itemizedlist>
147                             <listitem>
148                                 промежутки (пробелы или табуляторы) или запятые используются в 
149                                 качестве разделителей столбцов.
150                                 <note>
151                                     Использование запятых вместо пробелов безопаснее. Например, 
152                                     <literal>[2 1 +%i]</literal> означает <literal>[2, 1, %i]</literal>,
153                                     в то время как <literal>[2 1 + %i]</literal> означает 
154                                     <literal>[2, 1+%i]</literal>.
155                                 </note>
156                             </listitem>
157                             <listitem>
158                                 точки с запятой или возврат каретки используются в качестве 
159                                 разделителей строк. Множество строк не требует точек продолжения 
160                                 <literal>..</literal>
161                             </listitem>
162                         </itemizedlist>
163                     </para>
164                     <refsect3 id="brackets_Types_conversions">
165                         <title>Типы преобразований</title>
166                         <para>
167                             В некоторых пределах квадратные скобки могут применяться для 
168                             множества данных, имеющих разные, но совместимых типов. В этом случае 
169                             некоторые данные конвертируются в доминирующий тип, допустимый для 
170                             этого множества. Главные правила преобразования следующие:
171                             <orderedlist>
172                                 <listitem>
173                                     логическое значение &lt; кодированные целые &lt; десятичное число &lt; комплексное число
174                                 </listitem>
175                                 <listitem>десятичное число &lt; полином &lt; дробно-рациональное значение
176                                     <warning>
177                                         логические значения и полиномы не совместимы.
178                                         <itemizedlist>
179                                             <listitem>
180                                                 <literal>[%t 2. %z]</literal> допустимо:
181                                                 <literal>[%t 2.]</literal> сначала конвертируется 
182                                                 в <literal>[1. 2.]</literal>, а затем принимается
183                                                 <literal>[[1. 2.] %z]</literal>.
184                                             </listitem>
185                                             <listitem>
186                                                 <literal>[%z %t 2.]</literal> отклоняется и даёт 
187                                                 ошибку. Действительно,<literal>[%z %t]</literal>
188                                                 не может конвертироваться первым.
189                                             </listitem>
190                                         </itemizedlist>
191                                     </warning>
192                                 </listitem>
193                                 <listitem>
194                                     Любое кодированное целое может конкатенироваться с 
195                                     логическими значениями, десятичными числами или другими 
196                                     целыми того же типа inttype. Таким образом, выражения
197                                     <literal>[int8(2), uint8(7)]</literal>,
198                                     <literal>[int8(2), int16(7)]</literal>,
199                                     <literal>[int8(2), 7+0*%z]</literal>,
200                                     <literal>[int8(2), sparse(7)]</literal>, или
201                                     <literal>[int8(2), sparse(%t)]</literal>
202                                     приведут к ошибке.
203                                 </listitem>
204                                 <listitem>
205                                     Результат становится комплексно-кодированным поскольку 
206                                     комплексно-кодированный компонент -- значение, полином или 
207                                     дробно-рациональное значение -- встречается в списке (даже с 
208                                     нулевой мнимой частью)
209                                     <para/>
210                                     Аналогично, результат становится разрежённо-кодированным, 
211                                     поскольку разрежённо-кодированный компонент встречается и 
212                                     обрабатывается.
213                                 </listitem>
214                                 <listitem>
215                                     Можно конкатенировать полиномы или/и дробно-рациональные выражения, имеющие разные имена переменных. Затем, первый полином или дробно-рациональное выражение, встреченное в списке, устанавливает имя переменной для результата конкатенации:
216                                     <literal>[%z, 1+%s, 1-%i*%s]
217                                         // => [z, 1+z, 1-iz]
218                                     </literal>.
219                                 </listitem>
220                                 <listitem>
221                                     Текстовые компоненты могут конкатенироваться (в массив, ограниченный квадратными скобками) только с другим текстовыми компонентами или с пустой матрицей <literal>[]</literal>.
222                                 </listitem>
223                             </orderedlist>
224                         </para>
225                     </refsect3>
226                     <refsect3 id="brackets_overloading">
227                         <title>Перегрузка</title>
228                         <para>
229                             <itemizedlist>
230                                 <listitem>[,]: конкатенация по горизонтали:
231                                     Этот оператор является двоичными и автоматически итерируется 
232                                     слева направо. Его код перегрузки <literal>"c"</literal>.
233                                 </listitem>
234                                 <listitem>[;]: конкатенация по вертикали:
235                                     Этот оператор является двоичными и автоматически итерируется 
236                                     сверху вниз. Его код перегрузки <literal>"f"</literal>.
237                                 </listitem>
238                             </itemizedlist>
239                         </para>
240                     </refsect3>
241                     <para/>
242                     <refsect3>
243                         <title>Расширения</title>
244                         <para>
245                           <itemizedlist>
246                             <listitem>
247                               Для конкатенации простых списков, пожалуйста, используйте <link linkend="lstcat">lstcat</link>.
248                             </listitem>
249                             <listitem>
250                               Для составления векторов или матриц поверх некоторой размерности > 
251                                     2 для построения N-мерного массива, пожалуйста, используйте 
252                                     <link linkend="cat">cat</link>.
253                             </listitem>
254                           </itemizedlist>
255                         </para>
256                     </refsect3>
257                 </listitem>
258                 <para/>
259             </varlistentry>
260             <varlistentry>
261                 <term>[] на левой стороне от присвоения <literal>"="</literal></term>
262                 <listitem>
263                     <para>
264                         В этом случае квадратные скобки не являются конкатенаторами. Они 
265                         используются в качестве левого и правого разделителя последовательностей 
266                         переменных, используемых в качестве получателей.
267                     </para>
268                     <para>
269                         <itemizedlist>
270                             <listitem>
271                                 Получатели должны быть переменными.
272                                 Литеральные выражения не допускаются.
273                             </listitem>
274                             <listitem>Переменные следует разделять запятыми.
275                             </listitem>
276                             <listitem>
277                                 В распределённом присвоении необходимо, чтобы получателей на 
278                                 левой стороне было по крайней мере столько же, сколько выходных 
279                                 источников, не более. Если получателей слева меньше, чем 
280                                 источников справа, то источники несобираемых данных игнорируется. 
281                                 Примеры:
282                                 <simplelist>
283                                     <member><literal>[a,b]=(%pi,"Hi", %z)</literal>
284                                         приемлемо, но <literal>%z</literal> игнорируется.
285                                     </member>
286                                     <member><literal>[a,b,c]=(%pi,"Hi")</literal>
287                                         даст ошибку, поскольку <literal>c</literal>
288                                         ожидает некоторой пищи.
289                                     </member>
290                                 </simplelist>
291                             </listitem>
292                             <listitem>
293                                 <literal>[a,b,a] = (%pi, %z, "Allo")</literal> выполняет
294                                 присвоения слева направо, таким образом, что в конце
295                                 концов будет <literal>a = "Allo"</literal>.
296                             </listitem>
297                         </itemizedlist>
298                     </para>
299                 </listitem>
300             </varlistentry>
301         </variablelist>
302     </refsection>
303     <refsection role="examples">
304         <title>Примеры</title>
305         <programlisting role="example"><![CDATA[
306 // Конкатенация по горизонтали
307 a = [ %pi 4 -1 ]
308 b1 = grand(3,4,"uin",0,10)
309 b2 = grand(3,2,"uin",0,10)
310 b = [b1 b2]  // они должны иметь одинаковое количество строк
311
312 // Конкатенация по вертикали
313 a = [-2 ; 10 ; 7]
314
315 b1 = grand(2,4,"uin",0,10)
316 b2 = grand(3,4,"uin",0,10)
317 b = [b1 ; b2] // они должны иметь одинаковое количество столбцов
318
319 // Смешанная конкатенация по горизонтали и вертикали
320 a = [ 3 7 ; 6, 5 ]
321 b = [ 1:3 ; 7:3:13]
322 c = [ a b ; a b]
323
324 d = [ 3 5
325       1 4
326     ]
327 e = [ d d d
328       d d d
329     ]
330 // Конкатенация данных разных типов:
331 ['this is' ; 'a column' ; 'of texts']
332
333 s = poly(0,'s');[1/s,2/s]
334 [tf2ss(1/s),tf2ss(2/s)]
335
336 [%t %f %f %T %F]
337      ]]></programlisting>
338         <para>
339             Разнородные конкатенации с автоматическими преобразованиями типов:
340         </para>
341         <programlisting role="example"><![CDATA[
342 [%T int8(-5)]
343 [%T %pi %f 2]
344 [%pi, 2+%i, %F]
345 [%pi int16(-1000.84) 1.23]
346 v = [%pi+0*%i, %F, %z, (1-%z)^2 ]; typeof(v), isreal(v)
347 v = [10 1/%z], typeof(v)
348
349 // Особый случай: int16 и uint8 вместе, поскольку исходное
350 //   преобразование в вещественное значение распространяется слева направо
351 [%pi int16(-1000.84) uint8(87)]
352      ]]></programlisting>
353         <para>
354             Несовместимые разнородные преобразования, приводящие к ОШИБКАМ:
355         </para>
356         <programlisting role="example"><![CDATA[
357 [%F %z]
358 [int8(%pi), uint8(%e)]
359 [int8(%pi), int16(%e)]
360 [int8(-70), sparse(18)]
361 [int8(-70), sparse([%T %F])]
362      ]]></programlisting>
363         <para>
364             Конкатенация cell-массивов:
365         </para>
366         <programlisting role="example"><![CDATA[
367 c1 = {%pi %t};
368 c2 = {%z "abc"};
369 c = [[{%i} c1] ; [c2, {1/%z^2}]]  // запятая обязательна, чтобы не считать, что c2{1/%z^2}
370 ]]></programlisting>
371
372         <para>
373             <emphasis role="bold">Распределённые присвоения:</emphasis>
374         </para>
375         <programlisting role="example"><![CDATA[
376 // Выход функции. Чаще всего, выходные результаты последовательны:
377 M = rand(3,3);
378 [u, s] = schur(M) // ожидаем и используем как результаты u, так и s
379 u = schur(M)      // ожидаем и храним только первый результат u
380
381 // Прямой список на правой стороне
382 [a, b, c] = (%pi, %t, "test")
383 [a, b] = (%e, %f, "Hello")
384 [a, b, a] = (%pi, %t, "test"); a
385
386 // Явный список на правой стороне
387 L = list(%z, %i, %t, %pi, "Text");
388 [a, b, c] = L(:)
389
390 // Структура на правой стороне
391 s(2,3).r = %pi; s(2,1).r = %i; s(2,2) = %e;
392 s(2,:).r
393 s.r([2 4 6])
394 [a, b, c] = s.r([2 4 6])
395
396 // Запрещённые / отклоняемые выражения на левой стороне (приводит к ошибке)
397 [m, n, m+n] = myfun(a,b)   // Символьные выражения, такие, как "m+n" запрещены
398 [p, 4.5, q] = myfun(a,b)   // Литеральные значения на левой стороне или такие выражения, как "4.5" запрещены
399 [r, s+3 ] = myfun(a,b)   // Выражения, смешивающие литералы и символьные значения, такие, как "s+3" не могут быть приёмниками на левой стороне
400 ]]></programlisting>
401         <screen><![CDATA[--> [a, b, c] = (%pi, %t, "test")
402  a  =
403    3.1415927
404
405  b  =
406   T
407
408  c  =
409  test
410
411 --> [a, b] = (%e, %f, "Hello")
412  a  =
413    2.7182818
414
415  b  =
416   F
417
418 --> [a, b, a] = (%pi, %t, "test"); a
419  a  =
420  test
421 ]]></screen>
422     </refsection>
423     <refsection role="see also">
424         <title>Смотрите также</title>
425         <simplelist type="inline">
426             <member>
427                 <link linkend="cat">cat</link>
428             </member>
429             <member>
430                 <link linkend="lstcat">lstcat</link>
431             </member>
432             <member>
433                 <link linkend="comma">запятая</link>
434             </member>
435             <member>
436                 <link linkend="semicolon">точка с запятой</link>
437             </member>
438             <member>
439                 <link linkend="parentheses">фигурные скобки</link>
440             </member>
441             <member>
442                 <link linkend="empty">empty</link>
443             </member>
444             <member>
445                 <link linkend="overloading">перегрузка</link>
446             </member>
447         </simplelist>
448     </refsection>
449     <refsection role="history">
450         <title>История</title>
451         <revhistory>
452             <revision>
453                 <revnumber>6.0</revnumber>
454                 <revdescription>
455                     Квадратные скобки <literal>[..]</literal> и фигурные скобки
456                     <literal>{..}</literal> теперь не эквивалентны.
457                 </revdescription>
458             </revision>
459             <revision>
460                 <revnumber>6.1.0</revnumber>
461                 <revdescription>
462                     <itemizedlist>
463                         <listitem>
464                             Логические знаения и кодированные целые числа теперь могут 
465                             конкатенироваться друг с другом, как в [%t, int8(-5)].
466                         </listitem>
467                         <listitem>
468                             [a, b, ..] = (A, B,..) теперь выполняет присвоение слева направо.
469                         </listitem>
470                     </itemizedlist>
471                 </revdescription>
472             </revision>
473             <revision>
474                 <revnumber>6.1.1</revnumber>
475                 <revdescription>
476                     Конкатенации между кодированными целыми и десятичными числами теперь 
477                     поддерживаются.
478                 </revdescription>
479             </revision>
480         </revhistory>
481     </refsection>
482 </refentry>