<?xml version="1.0" encoding="UTF-8"?>
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
          xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml"
          xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
          xmlns:scilab="http://www.scilab.org" xml:id="insertion" xml:lang="pt">
    <refnamediv>
        <refname>insertion</refname>
        <refpurpose>atribuição ou modificação parcial de variáveis</refpurpose>
    </refnamediv>
    <refnamediv xml:id="assignation">
        <refname>assignation</refname>
        <refpurpose>atribuição parcial de variáveis</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Seqüência de Chamamento</title>
        <synopsis>x(i,j)=a
            x(i)=a
            l(i)=a
            l(k1)...(kn)(i)=a or l(list(k1,...,kn,i))=a
            l(k1)...(kn)(i,j)=a or l(list(k1,...,kn,list(i,j))=a
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Parâmetros</title>
        <variablelist>
            <varlistentry>
                <term>x</term>
                <listitem>
                    <para>matriz de qualquer tipo</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>l</term>
                <listitem>
                    <para>lista</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>i,j</term>
                <listitem>
                    <para>índices</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>k1,...kn</term>
                <listitem>
                    <para>índices com valores inteiros</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>a</term>
                <listitem>
                    <para>novo valor de entrada</para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Descrição</title>
        <refsect3>
            <title>Caso de matrizes</title>
            <para>
              Se <literal>x</literal> é uma matriz, os índices
              <literal>i</literal> e <literal>j</literal>, podem ser:
            </para>
            <variablelist>
              <varlistentry>
                <term>Escalares reais, vetores ou matrizes</term>
                <listitem>
                  <para>neste caso, os valores fornecidos como índices devem ser
                    inteiros e apenas suas partes inteiras são levadas em
                    consideração.
                  </para>
                  <itemizedlist>
                    <listitem>
                      <para>
                        Se <literal>a</literal> é uma matriz com dimensões
                        <literal>(size(i,'*'),size(j,'*'))</literal>,
                        <literal>x(i,j)=a</literal> retorna uma nova matriz
                        <literal>x</literal> tal que
                        <literal>x(int(i(l)),int(j(k)))=a(l,k) </literal> para
                        <literal>l</literal> de 1 a <literal>size(i,'*')</literal>
                        e <literal>k</literal> de 1 a
                        <literal>size(j,'*')</literal>, as outras entradas
                        iniciais de <literal>x</literal> não são
                        modificadas.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        Se <literal>a</literal> é um escalar,
                        <literal>x(i,j)=a</literal> retorna uma nova matriz
                        <literal>x</literal> tal que
                        <literal>x(int(i(l)),int(j(k)))=a</literal> para
                        <literal>l</literal> de 1 a <literal>size(i,'*')</literal>
                        e <literal>k</literal> de 1 a
                        <literal>size(j,'*')</literal>, as outras entradas
                        iniciais de <literal>x</literal> não são
                        modificadas.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        Se o valor máximo de <literal>i</literal> ou
                        <literal>j</literal> exceder a dimensão correspondente da
                        matriz <literal>x</literal> , o array <literal>x</literal>
                        é previamente estendido para as dimensões requeridas com
                        entradas 0 para matrizes padrões, strings de comprimento 0
                        para matrizes de strings e valores falsos para matrizes de
                        booleanos.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(i,j)=[]</literal> cancela linhas
                        especificadas por <literal>i</literal> se
                        <literal>j</literal> corresponde a todas as colunas de
                        <literal>x</literal> ou cancela colunas especificadas por
                        <literal>j</literal> se <literal>i</literal> corresponde a
                        todas as linhas de <literal>x</literal>. Em outros casos
                        <literal>x(i,j)=[]</literal> produz um erro.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(i)=a</literal> com <literal>a</literal>
                        um vetor retorna a nova matriz <literal>x</literal> tal
                        que <literal>x(int(i(l)))=a(l)</literal> para
                        <literal>l</literal> de 1 a <literal>size(i,'*')</literal>
                        , outras entradas iniciais de <literal>x</literal> não são
                        modificadas.
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(i)=a</literal> com <literal>a</literal>
                        um escalar retorna uma nova matriz <literal>x</literal>
                        tal que <literal>x(int(i(l)))=a</literal> para
                        <literal>l</literal> de 1 a <literal>size(i,'*')</literal>
                        , outras entradas iniciais de <literal>x</literal> não são
                        modificadas.
                      </para>
                      <para>
                        Se o valor máximo de <literal>i</literal> exceder
                        <literal>size(x,1)</literal>, <literal>x</literal> é
                        previamente estendida para a dimensão requerida com
                        entradas 0 para matrizes padrões, strings de comprimento 0
                        para matrizes de strings e valores falsos para matrizes de
                        booleanos.
                      </para>
                      <variablelist>
                        <varlistentry>
                          <term>Se</term>
                          <listitem>
                            <para>
                              <literal>x</literal> é uma matriz 1x1
                            </para>
                            <para>
                              <literal>a</literal> pode ser um vetor linha
                              (respectivamente coluna) com dimensão
                              <literal>size(i,'*')</literal>. A matriz
                              <literal>x</literal> resultante é um vetor linha
                              (respectivamente coluna).
                            </para>
                          </listitem>
                        </varlistentry>
                        <varlistentry>
                          <term>Se</term>
                          <listitem>
                            <para>
                              <literal>x</literal> é um vetor linha
                            </para>
                            <para>
                              <literal>a</literal> deve ser um vetor linha
                              de dimensão <literal>size(i,'*')</literal>
                            </para>
                          </listitem>
                        </varlistentry>
                        <varlistentry>
                          <term>Se</term>
                          <listitem>
                            <para>
                              <literal>x</literal> é um vetor coluna
                            </para>
                            <para>
                              <literal>a</literal> deve ser um vetor coluna
                              de dimensão <literal>size(i,'*')</literal>
                            </para>
                          </listitem>
                        </varlistentry>
                        <varlistentry>
                          <term>Se</term>
                          <listitem>
                            <para>
                              <literal>x</literal> é uma matriz geral
                            </para>
                            <para>
                              <literal>a</literal> deve ser um vetor linha
                              ou coluna de dimensão <literal>size(i,'*')</literal>
                              e o valor máximo de <literal>i</literal> não pode
                              exceder <literal>size(x,'*')</literal>,
                            </para>
                          </listitem>
                        </varlistentry>
                      </variablelist>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(i)=[]</literal> cancela entradas
                        especificadas por <literal>i</literal>.
                      </para>
                    </listitem>
                  </itemizedlist>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>O símbolo :</term>
                <listitem>
                  <para>
                    O símbolo <literal>':'</literal> significa "todos os
                    elementos".
                  </para>
                  <itemizedlist>
                    <listitem>
                      <para>
                        <literal>x(i,:)=a</literal> é interpretado como
                        <literal>x(i,1:size(x,2))=a</literal>
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(:,j)=a</literal> é interpretado como
                        <literal>x(1:size(x,1),j)=a</literal>
                      </para>
                    </listitem>
                    <listitem>
                      <para>
                        <literal>x(:)=a</literal> retorna em
                        <literal>x</literal> a matriz <literal>a</literal> de
                        forma redefinida de acordo com as dimensões de x.
                        <literal>size(x,'*')</literal> deve ser igual a
                        <literal>size(a,'*')</literal>
                      </para>
                    </listitem>
                  </itemizedlist>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>Vetores de booleanos</term>
                <listitem>
                  <para>
                    se um índice (<literal>i</literal> ou
                    <literal>j</literal> ) é um vetor de booleanos, é interpretado
                    como <literal>find(i)</literal> ou, respectivamente,
                    <literal>find(j)</literal>
                  </para>
                </listitem>
              </varlistentry>
              <varlistentry>
                <term>Polinômios</term>
                <listitem>
                  <para>
                    se um índice (<literal>i</literal> ou
                    <literal>j</literal> ) é um vetor de polinômios ou um vetor de
                    polinômios implícito, é interpretado como
                    <literal>horner(i,m)</literal> ou respectivamente
                    <literal>horner(j,n)</literal> onde <literal>m</literal> e
                    <literal>n</literal> são as dimensões associadas de
                    <literal>x</literal>. Mesmo se esse recurso funcionar para
                    todos os polinômios, é recomendado utilizar polinômios em
                    <literal>$</literal> para legibilidade.
                  </para>
                </listitem>
              </varlistentry>
            </variablelist>
        </refsect3>
        <refsect3>
            <title>Caso de listas ou Tlists</title>
            <itemizedlist>
              <listitem>
                <para>
                  Se estiverem presentes, os <literal>ki</literal> fornecem
                  o endereço para uma entrada de sub-lista da estrutura de dados
                  <literal>l</literal> data structure. Eles permitem uma extração
                  recursiva sem cópias intermediárias. As instruções
                  <literal>l(k1)...(kn)(i)=a</literal> e
                  <literal>l(list(k1,...,kn,i)=a)</literal> são interpretadas
                  como:
                </para>
                <para>
                  <literal>lk1 = l(k1)</literal>
                  <literal> .. = ..
                  </literal>
                </para>
                <para>
                  <literal>lkn = lkn-1(kn)</literal>
                  <literal> lkn(i) =
                    a
                  </literal>
                </para>
                <para>
                  <literal>lkn-1(kn) = lkn</literal>
                  <literal> .. = ..
                  </literal>
                  <literal>l(k1) = lk1</literal>
                </para>
                <para>
                  E as instruções <literal>l(k1)...(kn)(i,j)=a</literal> e
                  <literal>l(list(k1,...,kn,list(i,j))=a</literal> são
                  interpretadas como:
                </para>
                <para>
                  <literal>lk1 = l(k1)</literal>
                  <literal> .. = ..
                  </literal>
                </para>
                <para>
                  <literal>lkn = lkn-1(kn)</literal>
                  <literal>lkn(i,j) =
                    a
                  </literal>
                </para>
                <para>
                  <literal>lkn-1(kn) = lkn</literal>
                  <literal> .. = ..
                  </literal>
                  <literal>l(k1)= lk1</literal>
                </para>
              </listitem>
              <listitem>
                <para>
                  <literal>i</literal> pode ser :
                </para>
                <itemizedlist>
                  <listitem>
                    <para>Um escalar real não-negativo.
                      <literal>l(0)=a</literal> adiciona uma entrada à "esquerda"
                      da lista, <literal>l(i)=a</literal> configura a entrada
                      <literal>i</literal> da lista <literal>l</literal> como
                      <literal>a</literal>. Se <literal>i&gt;size(l)</literal>,
                      <literal>l</literal> é previamente estendido com entradas de
                      comprimento 0 (indefinidas). <literal>l(i)=null()</literal>
                      suprime a <literal>i</literal>-ésima entrada da
                      lista.
                    </para>
                  </listitem>
                  <listitem>
                    <para>
                      Um polinômio. Se <literal>i</literal> é um polinômio,
                      é interpretado como <literal>horner(i,m)</literal> onde
                      <literal>m=size(l)</literal>. Mesmo se este recurso
                      funcionar para todos os polinômios, é recomendado utilizar
                      polinômios em <literal>$</literal> para legibilidade.
                    </para>
                  </listitem>
                </itemizedlist>
              </listitem>
              <listitem>
                <para>
                  <literal>k1,..kn</literal> podem ser :
                </para>
                <itemizedlist>
                  <listitem>
                    <para>Escalares reais positivos.</para>
                  </listitem>
                  <listitem>
                    <para>Polinômios, interpretados como
                      <literal>horner(ki,m)</literal> onde <literal>m</literal> é
                      o tamanho da sub-lista correspondente.
                    </para>
                  </listitem>
                  <listitem>
                    <para>Strings associados a nomes de entradas de uma
                      sub-lista.
                    </para>
                  </listitem>
                </itemizedlist>
              </listitem>
            </itemizedlist>
        </refsect3>
        <refsect3>
            <title>Observações</title>
            <para>Para tipos de matrizes "soft-coded" como funções racionais e
                sistemas lineares de espaços de estados, a sintaxe <literal>x(i)</literal>
                não pode ser usada para inserção de entradas em vetores devido a confusões
                com inserção de entradas em listas. A sintaxe <literal>x(1,j)</literal> ou
                <literal>x(i,1)</literal> deve ser usada.
            </para>
        </refsect3>
    </refsection>
    <refsection>
        <title>Exemplos</title>
        <para>Caso de matrizes :</para>
        <programlisting role="example"><![CDATA[
a = [1 2 3;4 5 6]
a(1,2) = 10
a([1 1],2) = [-1 ; -2]
a(:,1) = [8 ; 5]
a(1,3:-1:1) = [77 44 99]
a(1) = %s
a(6) = %s+1
a(:) = 1:6
a([%t %f],1) = 33
a(1:2,$-1) = [2;4]
a($:-1:1,1) = [8;7]
a($) = 123
//
x = 'teste'
x([4 5]) = ['4','5']
//
b = [1/%s,(%s+1)/(%s-1)]
b(1,1) = 0
b(1,$) = b(1,$)+1
b(2) = [1 2] // o numerador
     ]]></programlisting>
        <para>Caso de listas ou Tlist :</para>
        <programlisting role="example"><![CDATA[
l = list(1,'qwerw',%s)
l(1) = 'Modificado'
l(0) = 'Adicionado'
l(6) = ['mais um' ; 'adicionado']
//
//
dts = list(1, tlist(['x';'a';'b'],10,[2 3]));
dts(2).a = 33
dts(2)('b')(1,2) = -100
 ]]></programlisting>
    </refsection>
    <refsection role="see also">
        <title>Ver Também</title>
        <simplelist type="inline">
            <member>
                <link linkend="extraction">extraction</link>
            </member>
            <member>
                <link linkend="colon">colon</link>
            </member>
            <member>
                <link linkend="find">find</link>
            </member>
            <member>
                <link linkend="horner">horner</link>
            </member>
            <member>
                <link linkend="parentheses">parentheses</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
