Anterior: , Acima: Conjuntos   [Conteúdo][Índice]

38.2, Funções e Variáveis Definidas para Conjuntos

Função: adjoin (x, a)

Retorna a união do conjunto a com {x}.

adjoin reclama se a não for um conjunto literal.

adjoin(x, a) e union(set(x), a) são equivalentes; todavia, adjoin pode ser um pouco mais rápida que union.

Veja também disjoin.

Exemplos:

(%i1) adjoin (c, {a, b});
(%o1)                       {a, b, c}
(%i2) adjoin (a, {a, b});
(%o2)                        {a, b}
Função: belln (n)

Representa o \(n\)-ésimo número de Bell number. belln(n) é o número de partições de um conjunto n elementos.

Para inteiros não negativos n, belln(n) simplifica para o \(n\)-ésimo número de Bell. belln não simplifica para qualquer outro tipo de argumento.

belln distribui sobre equações, listas, matrizes e conjuntos.

Exemplos:

belln aplicado a inteiros não negativos.

(%i1) makelist (belln (i), i, 0, 6);
(%o1)               [1, 1, 2, 5, 15, 52, 203]
(%i2) is (cardinality (set_partitions ({})) = belln (0));
(%o2)                         true
(%i3) is (cardinality (set_partitions ({1, 2, 3, 4, 5, 6})) = belln (6));
(%o3)                         true

belln aplicado a argumentos que não são inteiros não negativos.

(%i1) [belln (x), belln (sqrt(3)), belln (-9)];
(%o1)        [belln(x), belln(sqrt(3)), belln(- 9)]
Função: cardinality (a)

Retorna o número de elementos distintos do conjunto a.

cardinality ignora elementos redundantes mesmo quando a simplificação está dessabilitada.

Exemplos:

(%i1) cardinality ({});
(%o1)                           0
(%i2) cardinality ({a, a, b, c});
(%o2)                           3
(%i3) simp : false;
(%o3)                         false
(%i4) cardinality ({a, a, b, c});
(%o4)                           3
Função: cartesian_product (b_1, ... , b_n)

Retorna um conjunto de listas da forma [x_1, ..., x_n], onde x_1, ..., x_n são elementos dos conjuntos b_1, ... , b_n, respectivamente.

cartesian_product reclama se qualquer argumento não for um conjunto literal.

Exemplos:

(%i1) cartesian_product ({0, 1});
(%o1)                      {[0], [1]}
(%i2) cartesian_product ({0, 1}, {0, 1});
(%o2)           {[0, 0], [0, 1], [1, 0], [1, 1]}
(%i3) cartesian_product ({x}, {y}, {z});
(%o3)                      {[x, y, z]}
(%i4) cartesian_product ({x}, {-1, 0, 1});
(%o4)              {[x, - 1], [x, 0], [x, 1]}
Função: disjoin (x, a)

Retorna o conjunto a sem o elemento x. Se x não for um elemento de a, retorna a sem modificações.

disjoin reclama se a não for um conjunto literal.

disjoin(x, a), delete(x, a), e setdifference(a, set(x)) são todos equivalentes. Desses, disjoin é geralmente mais rápido que os outros.

Exemplos:

(%i1) disjoin (a, {a, b, c, d});
(%o1)                       {b, c, d}
(%i2) disjoin (a + b, {5, z, a + b, %pi});
(%o2)                      {5, %pi, z}
(%i3) disjoin (a - b, {5, z, a + b, %pi});
(%o3)                  {5, %pi, b + a, z}
Função: disjointp (a, b)

Retorna true se e somente se os conjuntos a e b forem disjuntos.

disjointp reclama se ou a ou b não forem conjuntos literais.

Exemplos:

(%i1) disjointp ({a, b, c}, {1, 2, 3});
(%o1)                         true
(%i2) disjointp ({a, b, 3}, {1, 2, 3});
(%o2)                         false
Função: divisors (n)

Representa o conjunto dos divisores de n.

divisors(n) simplifica para um conjunto de inteiros quando n for um inteiro não nulo. O cojunto dos divisores inclui os elementos 1 e n. Os divisores de um inteiro negativo são os divisores de seu valor absoluto.

divisors distribui sobre equações, listas, matrizes, e conjuntos.

Exemplos:

Podemos verificar que 28 é um número perfeito: a adição de seus divisores (exceto o próprio 28) é 28.

(%i1) s: divisors(28);
(%o1)                 {1, 2, 4, 7, 14, 28}
(%i2) lreduce ("+", args(s)) - 28;
(%o2)                          28

divisors é uma função de simplificação. Substituindo 8 por a em divisors(a) retorna os divisores sem fazer a reavaliação de divisors(8).

(%i1) divisors (a);
(%o1)                      divisors(a)
(%i2) subst (8, a, %);
(%o2)                     {1, 2, 4, 8}

divisors distribui sobre equações, listas, matrizes, e conjuntos.

(%i1) divisors (a = b);
(%o1)               divisors(a) = divisors(b)
(%i2) divisors ([a, b, c]);
(%o2)        [divisors(a), divisors(b), divisors(c)]
(%i3) divisors (matrix ([a, b], [c, d]));
                  [ divisors(a)  divisors(b) ]
(%o3)             [                          ]
                  [ divisors(c)  divisors(d) ]
(%i4) divisors ({a, b, c});
(%o4)        {divisors(a), divisors(b), divisors(c)}
Função: elementp (x, a)

Retorna true se e somente se x for um elemento do conjunto a.

elementp reclama se a não for um conjunto literal.

Exemplos:

(%i1) elementp (sin(1), {sin(1), sin(2), sin(3)});
(%o1)                         true
(%i2) elementp (sin(1), {cos(1), cos(2), cos(3)});
(%o2)                         false
Função: emptyp (a)

Retorna true se e somente se a for o conjunto vazio ou a lista vazia.

Exemplos:

(%i1) map (emptyp, [{}, []]);
(%o1)                     [true, true]
(%i2) map (emptyp, [a + b, {{}}, %pi]);
(%o2)                 [false, false, false]
Função: equiv_classes (s, F)

Retorna um conjunto das classes de equivalências do conjunto s com relação à relação de equivalência F.

F é uma função de duas variáveis definida sobre o produto cartesiano s por s. O valor de retorno de F é ou true ou false, ou uma expressão expr tal que is(expr) é ou true ou false.

Quando F não for um relação de equivalência, equiv_classes aceita sem reclamação, mas o resultado é geralmente incorreto nesse caso.

Exemplos:

A relação de equivalência é uma expressão lambda a qual retorna true ou false.

(%i1) equiv_classes ({1, 1.0, 2, 2.0, 3, 3.0}, lambda ([x, y], is (equal (x, y))));
(%o1)            {{1, 1.0}, {2, 2.0}, {3, 3.0}}

A relação de equivalência é o nome de uma função relacional que avalia para true ou false.

(%i1) equiv_classes ({1, 1.0, 2, 2.0, 3, 3.0}, equal);
(%o1)            {{1, 1.0}, {2, 2.0}, {3, 3.0}}

As classes de equivalência são números que diferem por um multiplo de 3.

(%i1) equiv_classes ({1, 2, 3, 4, 5, 6, 7}, lambda ([x, y], remainder (x - y, 3) = 0));
(%o1)              {{1, 4, 7}, {2, 5}, {3, 6}}
Função: every (f, s)
Função: every (f, L_1, ..., L_n)

Retorna true se o predicado f for true para todos os argumentos fornecidos.

Dado um conjunto como sgundo argumento, every(f, s) retorna true se is(f(a_i)) retornar true para todos os a_i em s. every pode ou não avaliar f para todos os a_i em s. Uma vez que conjuntos são desordenados, every pode avaliar f(a_i) em qualquer ordem.

Dada uma ou mais listas como argumentos, every(f, L_1, ..., L_n) retorna true se is(f(x_1, ..., x_n)) retornar true para todos os x_1, ..., x_n em L_1, ..., L_n, respectivamente. every pode ou não avaliar f para toda combinação x_1, ..., x_n. every avalia listas na ordem de incremento do índice.

Dado um conjunto vazio {} ou uma lista vazia [] como argumentos, every retorna false.

Quando o sinalizador global maperror for true, todas as listas L_1, ..., L_n devem ter o mesmo comprimento. Quando maperror for false, argumentos listas são efetivamente truncados para o comprimento da menor lista.

Retorna valores do predicado f que avaliam (via is) para alguma coisa outra que não true ou false são governados através do sinalizador global prederror. Quando prederror for true, tais valores são tratados como false, e o valor de retorno de every é false. Quando prederror for false, tais valores são tratados como unknown, e o valor de retorno de every é unknown.

Exemplos:

every aplicada a um conjunto simples. O predicado é uma função de um argumento.

(%i1) every (integerp, {1, 2, 3, 4, 5, 6});
(%o1)                         true
(%i2) every (atom, {1, 2, sin(3), 4, 5 + y, 6});
(%o2)                         false

every aplicada a duas listas. O predicado é uma função de dois argumentos.

(%i1) every ("=", [a, b, c], [a, b, c]);
(%o1)                         true
(%i2) every ("#", [a, b, c], [a, b, c]);
(%o2)                         false

Retorna valores do predicado f que avalia para alguma coisa outra que não true ou false são governados por meio do sinalizador global prederror.

(%i1) prederror : false;
(%o1)                         false
(%i2) map (lambda ([a, b], is (a < b)), [x, y, z], [x^2, y^2, z^2]);
(%o2)              [unknown, unknown, unknown]
(%i3) every ("<", [x, y, z], [x^2, y^2, z^2]);
(%o3)                        unknown
(%i4) prederror : true;
(%o4)                         true
(%i5) every ("<", [x, y, z], [x^2, y^2, z^2]);
(%o5)                         false
Função: extremal_subset (s, f, max)
Função: extremal_subset (s, f, min)

Retorna o subconjunto de s para o qual a função f toma valore máximos ou mínimos.

extremal_subset(s, f, max) retorna o subconjunto do conjunto ou lista s para os quais a função real f assume valor maximo.

extremal_subset(s, f, min) retorna o subconjuno do conjunto ou lista s para a qual a função real f assume valor mínimo.

Exemplos:

(%i1) extremal_subset ({-2, -1, 0, 1, 2}, abs, max);
(%o1)                       {- 2, 2}
(%i2) extremal_subset ({sqrt(2), 1.57, %pi/2}, sin, min);
(%o2)                       {sqrt(2)}
Função: flatten (expr)

Recebe argumentos de subexpressões que possuem o mesmo operator como expr e constrói uma expressão a partir desses argumentos coletados.

subexpressões nas quais o operador é diferente do operador principal de expr são copiadas sem modificação, mesmo se elas, in turn, contiverem a mesma subexpressão na qual o operador seja o mesmo que em expr.

Pode ser possível para flatten construir expressões nas quais o número de argumentos difira dos argumentos declarados para um operador; isso pode provocar uma mensagem de erro do simplificador ou do avaliador. flatten não tenta detectar tais situações.

Expressões com representações especiais, por exemplo, expressãoes racionais canônicas (CRE), não podem usar a função flatten; nesses casos, flatten retorna seus argumentos sem modificação.

Exemplos:

Aplicado a uma lista, flatten reune todos os elementos de lista que são listas.

(%i1) flatten ([a, b, [c, [d, e], f], [[g, h]], i, j]);
(%o1)            [a, b, c, d, e, f, g, h, i, j]

Aplicado a um conjunto, flatten reune todos os elementos de conjunto que são conjuntos.

(%i1) flatten ({a, {b}, {{c}}});
(%o1)                       {a, b, c}
(%i2) flatten ({a, {[a], {a}}});
(%o2)                       {a, [a]}

flatten é similar ao efeito de declarar o operador principal para ser enário. Todavia, flatten não faz efeito sobre subexpressões que possuem um operador diferente do operador principal, enquanto uma declaração enária faz efeito.

(%i1) expr: flatten (f (g (f (f (x)))));
(%o1)                     f(g(f(f(x))))
(%i2) declare (f, nary);
(%o2)                         done
(%i3) ev (expr);
(%o3)                      f(g(f(x)))

flatten trata funções subscritas da mesma forma que qualquer outro operador.

(%i1) flatten (f[5] (f[5] (x, y), z));
(%o1)                      f (x, y, z)
                            5

Pode ser possível para flatten construir expressões nas quais o número de argumentos difira dos argumentos declarados para um operador;

(%i1) 'mod (5, 'mod (7, 4));
(%o1)                   mod(5, mod(7, 4))
(%i2) flatten (%);
(%o2)                     mod(5, 7, 4)
(%i3) ''%, nouns;
Wrong number of arguments to mod
 -- an error.  Quitting.  To debug this try debugmode(true);
Função: full_listify (a)

Substitui todo oeradr de conjutno em a por um operadro de lista, e retorna o resultado. full_listify substitui operadores de conjunto em subexpressões restantes, mesmo se o operadro principal não for conjunto (set).

listify substitui somente o operador principal.

Exemplos:

(%i1) full_listify ({a, b, {c, {d, e, f}, g}});
(%o1)               [a, b, [c, [d, e, f], g]]
(%i2) full_listify (F (G ({a, b, H({c, d, e})})));
(%o2)              F(G([a, b, H([c, d, e])]))
Função: fullsetify (a)

Quando a for uma lista, substitui o operador de lista por um operador de conjunto, e aplica fullsetify a cada elemento que for um conjunto. Quando a não for uma lista, essa não lista é retornada em sua forma original e sem modificações.

setify substitui somente o operador principal.

Exemplos:

Na linha (%o2), o argumento de f não é convertido para um conjunto porque o operador principal de f([b]) não é uma lista.

(%i1) fullsetify ([a, [a]]);
(%o1)                       {a, {a}}
(%i2) fullsetify ([a, f([b])]);
(%o2)                      {a, f([b])}
Função: identity (x)

Retorna x para qualquer argumento x.

Exemplos:

identity pode ser usado como um predicado quando os argumentos forem valores Booleanos.

(%i1) every (identity, [true, true]);
(%o1)                         true
Função: integer_partitions (n)
Função: integer_partitions (n, len)

Retorna partições inteiras de n, isto é, listas de inteiros cuja soma dos elementos de cada lista é n.

integer_partitions(n) retorna o conjunto de todas as partições do inteiro n. Cada partição é uma lista ordenada do maior para o menor.

integer_partitions(n, len) retorna todas as partições que possuem comprimento len ou menor; nesse caso, zeros são anexado ao final de cada partição de comprimento menor que len terms to make each partition have exactly len terms. Each partition is a list sorted from greatest to least.

Uma lista \([a_1, ..., a_m]\) é uma partição de inteiros não negativos \(n\) quando (1) cada \(a_i\) é um inteiro não nulo, e (2) \(a_1 + ... + a_m = n.\) Dessa forma 0 não tem partiçãoes.

Exemplos:

(%i1) integer_partitions (3);
(%o1)               {[1, 1, 1], [2, 1], [3]}
(%i2) s: integer_partitions (25)$
(%i3) cardinality (s);
(%o3)                         1958
(%i4) map (lambda ([x], apply ("+", x)), s);
(%o4)                         {25}
(%i5) integer_partitions (5, 3);
(%o5) {[2, 2, 1], [3, 1, 1], [3, 2, 0], [4, 1, 0], [5, 0, 0]}
(%i6) integer_partitions (5, 2);
(%o6)               {[3, 2], [4, 1], [5, 0]}

Para encontrar todas as partições que satisfazem uma condição, use a função subset; aqui está um exemplo que encontra todas as partições de 10 cujos elementos da lista são números primos.

(%i1) s: integer_partitions (10)$
(%i2) cardinality (s);
(%o2)                          42
(%i3) xprimep(x) := integerp(x) and (x > 1) and primep(x)$
(%i4) subset (s, lambda ([x], every (xprimep, x)));
(%o4) {[2, 2, 2, 2, 2], [3, 3, 2, 2], [5, 3, 2], [5, 5], [7, 3]}
Função: intersect (a_1, ..., a_n)

intersect é o mesmo que intersection, como veremos.

Função: intersection (a_1, ..., a_n)

Retorna um conjunto contendo os elementos que são comuns aos conjuntos a_1 até a_n.

intersection reclama se qualquer argumento não for um conjunto literal.

Exemplos:

(%i1) S_1 : {a, b, c, d};
(%o1)                     {a, b, c, d}
(%i2) S_2 : {d, e, f, g};
(%o2)                     {d, e, f, g}
(%i3) S_3 : {c, d, e, f};
(%o3)                     {c, d, e, f}
(%i4) S_4 : {u, v, w};
(%o4)                       {u, v, w}
(%i5) intersection (S_1, S_2);
(%o5)                          {d}
(%i6) intersection (S_2, S_3);
(%o6)                       {d, e, f}
(%i7) intersection (S_1, S_2, S_3);
(%o7)                          {d}
(%i8) intersection (S_1, S_2, S_3, S_4);
(%o8)                          {}
Função: kron_delta (x, y)

Representa a função delta de Kronecker.

kron_delta simplifica para 1 quando x e y forem identicos ou demonstadamente equivalentes, e simplifica para 0 quando x e y demonstradamente não equivalentes. De outra forma, se não for certo que x e y são equivalentes, e kron_delta simplifica para uma expressão substantiva. kron_delta implementa uma política de segurança para expressões em ponto flutuante: se a diferença x - y for um número em ponto flutuante, kron_delta simplifica para uma expressão substantiva quando x for aparentemente equivalente a y.

Specificamente, kron_delta(x, y) simplifica para 1 quando is(x = y) for true. kron_delta também simplifica para 1 quando sign(abs(x - y)) for zero e x - y não for um número em ponto flutuante (e também não for um número de precisão simples em ponto flutuante e também não for um número de precisão dupla em poto flutuante, isto é, não for um bigfloat). kron_delta simplifica para 0 quando sign(abs(x - y)) for pos.

De outra forma, sign(abs(x - y)) é alguma coisa outra que não pos ou zero, ou se for zero e x - y for umnúmero em ponto flutuante. Nesses casos, kron_delta retorna um expressão substantiva.

kron_delta é declarada para ser simétrica. Isto é, kron_delta(x, y) é igual a kron_delta(y, x).

Exemplos:

Os argumentos de kron_delta são identicos. kron_delta simplifica para 1.

(%i1) kron_delta (a, a);
(%o1)                           1
(%i2) kron_delta (x^2 - y^2, x^2 - y^2);
(%o2)                           1
(%i3) float (kron_delta (1/10, 0.1));
(%o3)                           1

Os argumentos de kron_delta são equivalentes, e a diferença entre eles não é um número em ponto flutuante. kron_delta simplifica para 1.

(%i1) assume (equal (x, y));
(%o1)                     [equal(x, y)]
(%i2) kron_delta (x, y);
(%o2)                           1

Os argumentos de kron_delta não são equivalentes. kron_delta simplifica para 0.

(%i1) kron_delta (a + 1, a);
(%o1)                           0
(%i2) assume (a > b)$
(%i3) kron_delta (a, b);
(%o3)                           0
(%i4) kron_delta (1/5, 0.7);
(%o4)                           0

Os argumentos de kron_delta podem ou não serem equivalentes. kron_delta simplifica para uma expressão substantiva.

(%i1) kron_delta (a, b);
(%o1)                   kron_delta(a, b)
(%i2) assume(x >= y)$
(%i3) kron_delta (x, y);
(%o3)                   kron_delta(x, y)

Os argumentos de kron_delta são equivalentes, mas a diferença entre eles é um número em ponto flutuante. kron_delta simplifica para uma expressão substantiva.

(%i1) 1/4 - 0.25;
(%o1)                          0.0
(%i2) 1/10 - 0.1;
(%o2)                          0.0
(%i3) 0.25 - 0.25b0;
Warning:  Float to bigfloat conversion of 0.25
(%o3)                         0.0b0
(%i4) kron_delta (1/4, 0.25);
                                  1
(%o4)                  kron_delta(-, 0.25)
                                  4
(%i5) kron_delta (1/10, 0.1);
                                  1
(%o5)                  kron_delta(--, 0.1)
                                  10
(%i6) kron_delta (0.25, 0.25b0);
Warning:  Float to bigfloat conversion of 0.25
(%o6)               kron_delta(0.25, 2.5b-1)

kron_delta é simétrica.

(%i1) kron_delta (x, y);
(%o1)                   kron_delta(x, y)
(%i2) kron_delta (y, x);
(%o2)                   kron_delta(x, y)
(%i3) kron_delta (x, y) - kron_delta (y, x);
(%o3)                           0
(%i4) is (equal (kron_delta (x, y), kron_delta (y, x)));
(%o4)                         true
(%i5) is (kron_delta (x, y) = kron_delta (y, x));
(%o5)                         true
Função: listify (a)

Retorna uma lista contendo os elementos de a quando a for um conjunto. De outra forma, listify retorna a.

full_listify substitui todos os operadores de conjunto em a por operadores de lista.

Exemplos:

(%i1) listify ({a, b, c, d});
(%o1)                     [a, b, c, d]
(%i2) listify (F ({a, b, c, d}));
(%o2)                    F({a, b, c, d})
Função: lreduce (F, s)
Função: lreduce (F, s, s_0)

Extende a função de dois operadores F para uma função de n operadores usando composição, onde s é uma lista.

lreduce(F, s) returns F(... F(F(s_1, s_2), s_3), ... s_n). Quando o argumento opcional s_0 estiver presente, o resultado é equivalente a lreduce(F, cons(s_0, s)).

A função F é primeiramente aplicada à lista de elementos leftmost - mais à esquerda, daí o nome "lreduce".

Veja também rreduce, xreduce, e tree_reduce.

Exemplos:

lreduce sem o argumento opcional.

(%i1) lreduce (f, [1, 2, 3]);
(%o1)                     f(f(1, 2), 3)
(%i2) lreduce (f, [1, 2, 3, 4]);
(%o2)                  f(f(f(1, 2), 3), 4)

lreduce com o argumento opcional.

(%i1) lreduce (f, [1, 2, 3], 4);
(%o1)                  f(f(f(4, 1), 2), 3)

lreduce aplicada a operadores de dois argumentos internos (já definidos por padrão) do Maxima. / é o operador de divisão.

(%i1) lreduce ("^", args ({a, b, c, d}));
                               b c d
(%o1)                       ((a ) )
(%i2) lreduce ("/", args ({a, b, c, d}));
                                a
(%o2)                         -----
                              b c d
Função: makeset (expr, x, s)

Retorna um conjunto com elementos gerados a partir da expressão expr, onde x é uma lista de variáveis em expr, e sé um conjunto ou lista de listas. Para gerar cada elemento do conjunto, expr é avaliada com as variáveis x paralelamente a um elemento de s.

Cada elemento de s deve ter o mesmo comprimento que x. A lista de variáveis x deve ser uma lista de símbolos, sem subscritos. Mesmo se existir somente um símbolo, x deve ser uma lista de um elemento, e cada elemento de s deve ser uma lista de um elemento.

Veja também makelist.

Exemplos:

(%i1) makeset (i/j, [i, j], [[1, a], [2, b], [3, c], [4, d]]);
                           1  2  3  4
(%o1)                     {-, -, -, -}
                           a  b  c  d
(%i2) S : {x, y, z}$
(%i3) S3 : cartesian_product (S, S, S);
(%o3) {[x, x, x], [x, x, y], [x, x, z], [x, y, x], [x, y, y], 
[x, y, z], [x, z, x], [x, z, y], [x, z, z], [y, x, x], 
[y, x, y], [y, x, z], [y, y, x], [y, y, y], [y, y, z], 
[y, z, x], [y, z, y], [y, z, z], [z, x, x], [z, x, y], 
[z, x, z], [z, y, x], [z, y, y], [z, y, z], [z, z, x], 
[z, z, y], [z, z, z]}
(%i4) makeset (i + j + k, [i, j, k], S3);
(%o4) {3 x, 3 y, y + 2 x, 2 y + x, 3 z, z + 2 x, z + y + x, 
                                       z + 2 y, 2 z + x, 2 z + y}
(%i5) makeset (sin(x), [x], {[1], [2], [3]});
(%o5)               {sin(1), sin(2), sin(3)}
Função: moebius (n)

Representa a função de Moebius.

Quando n for o produto de \(k\) primos distintos, moebius(n) simplifica para \((-1)^k\); quando n = 1, simplifica para 1; e simplifica para 0 para todos os outros inteiros positivos.

moebius distribui sobre equações, listas, matrizes, e conjuntos.

Exemplos:

(%i1) moebius (1);
(%o1)                           1
(%i2) moebius (2 * 3 * 5);
(%o2)                          - 1
(%i3) moebius (11 * 17 * 29 * 31);
(%o3)                           1
(%i4) moebius (2^32);
(%o4)                           0
(%i5) moebius (n);
(%o5)                      moebius(n)
(%i6) moebius (n = 12);
(%o6)                    moebius(n) = 0
(%i7) moebius ([11, 11 * 13, 11 * 13 * 15]);
(%o7)                      [- 1, 1, 1]
(%i8) moebius (matrix ([11, 12], [13, 14]));
                           [ - 1  0 ]
(%o8)                      [        ]
                           [ - 1  1 ]
(%i9) moebius ({21, 22, 23, 24});
(%o9)                      {- 1, 0, 1}
Função: multinomial_coeff (a_1, ..., a_n)
Função: multinomial_coeff ()

Retorna o coeficiente multinomial.

Quando cada a_k for um inteiro não negativo, o coeficiente multinomial fornece o número de formas possíveis de colocar a_1 + ... + a_n objetos distintos em \(n\) caixas com a_k elementos na \(k\)’ésima caixa. Em geral, multinomial_coeff (a_1, ..., a_n) avalia para (a_1 + ... + a_n)!/(a_1! ... a_n!).

multinomial_coeff() (sem argumentos) avalia para 1.

minfactorial pode estar apta a simplificar o valor retornado por multinomial_coeff.

Exemplos:

(%i1) multinomial_coeff (1, 2, x);
                            (x + 3)!
(%o1)                       --------
                              2 x!
(%i2) minfactorial (%);
                     (x + 1) (x + 2) (x + 3)
(%o2)                -----------------------
                                2
(%i3) multinomial_coeff (-6, 2);
                             (- 4)!
(%o3)                       --------
                            2 (- 6)!
(%i4) minfactorial (%);
(%o4)                          10
Função: num_distinct_partitions (n)
Função: num_distinct_partitions (n, list)

Retorna o n;umero de partições de inteiros distintos de n quando n for um inteiro não negativo. De outra forma, num_distinct_partitions retorna uma expressão substantiva.

num_distinct_partitions(n, list) retorna uma lista do número de partições distintas de 1, 2, 3, ..., n.

Uma partição distinta de n é uma lista de inteiros positivos distintos \(k_1\), ..., \(k_m\) tais que n = k_1 + ... + k_m.

Exemplos:

(%i1) num_distinct_partitions (12);
(%o1)                          15
(%i2) num_distinct_partitions (12, list);
(%o2)      [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15]
(%i3) num_distinct_partitions (n);
(%o3)              num_distinct_partitions(n)
Função: num_partitions (n)
Função: num_partitions (n, list)

Retorna o número das partições inteiras de n quando n for um inteiro não negativo. De outra forma, num_partitions retorna uma expressão substantiva.

num_partitions(n, list) retorna uma lista do número de partições inteiras de 1, 2, 3, ..., n.

Para um inteiro não negativo n, num_partitions(n) é igual a cardinality(integer_partitions(n)); todavia, num_partitions não constrói atualmente o conjunto das partições, nesse sentido num_partitions é mais rápida.

Exemplos:

(%i1) num_partitions (5) = cardinality (integer_partitions (5));
(%o1)                         7 = 7
(%i2) num_partitions (8, list);
(%o2)            [1, 1, 2, 3, 5, 7, 11, 15, 22]
(%i3) num_partitions (n);
(%o3)                   num_partitions(n)
Função: partition_set (a, f)

Partições do conjunto a que satisfazem o predicado f.

partition_set retorna uma lista de dois conjuntos. O primeiro conjunto compreende os elementos de a para os quais f avalia para false, e o segundo conjunto compreende quaisquer outros elementos de a. partition_set não aplica is ao valor de retorno de f.

partition_set reclama se a não for um conjunto literal.

Veja também subset.

Exemplos:

(%i1) partition_set ({2, 7, 1, 8, 2, 8}, evenp);
(%o1)                   [{1, 7}, {2, 8}]
(%i2) partition_set ({x, rat(y), rat(y) + z, 1}, lambda ([x], ratp(x)));
(%o2)/R/              [{1, x}, {y, y + z}]
Função: permutations (a)

Retorna um conjunto todas as permutações distintas dos elementos da lista ou do conjunto a. Cada permutação é uma lista, não um conjunto.

Quando a for uma lista, elementos duplicados de a são incluídos nas permutações.

permutations reclama se a não for um conjunto literal ou uma lista literal.

Veja também random_permutation.

Exemplos:

(%i1) permutations ([a, a]);
(%o1)                       {[a, a]}
(%i2) permutations ([a, a, b]);
(%o2)           {[a, a, b], [a, b, a], [b, a, a]}
Função: powerset (a)
Função: powerset (a, n)

Retorna o conjunto de todos os dubconjuntos de a, ou um subconjunto de a.

powerset(a) retorna o conjunto de todos os subconjuntos do conjunto a. powerset(a) tem 2^cardinality(a) elementos.

powerset(a, n) retorna o conjunto de todos os subconjuntos de a que possuem cardinalidade n.

powerset reclama se a não for um conjunto literal, ou se n não for um inteiro não negativo.

Exemplos:

(%i1) powerset ({a, b, c});
(%o1) {{}, {a}, {a, b}, {a, b, c}, {a, c}, {b}, {b, c}, {c}}
(%i2) powerset ({w, x, y, z}, 4);
(%o2)                    {{w, x, y, z}}
(%i3) powerset ({w, x, y, z}, 3);
(%o3)     {{w, x, y}, {w, x, z}, {w, y, z}, {x, y, z}}
(%i4) powerset ({w, x, y, z}, 2);
(%o4)   {{w, x}, {w, y}, {w, z}, {x, y}, {x, z}, {y, z}}
(%i5) powerset ({w, x, y, z}, 1);
(%o5)                 {{w}, {x}, {y}, {z}}
(%i6) powerset ({w, x, y, z}, 0);
(%o6)                         {{}}
Função: random_permutation (a)

Retorna uma permutação aleatória do conjunto ou da lista a, como construído pelo algorítimo de embaralhar desenvolvido por Knuth.

O valor de retorno é uma nova lista, que é diferente da lista/conjunto original podendo inclusive ser a propria lista repetida. Todavia, os elementos do argumento não são copiados.

Exemplos:

(%i1) random_permutation ([a, b, c, 1, 2, 3]);
(%o1)                  [c, 1, 2, 3, a, b]
(%i2) random_permutation ([a, b, c, 1, 2, 3]);
(%o2)                  [b, 3, 1, c, a, 2]
(%i3) random_permutation ({x + 1, y + 2, z + 3});
(%o3)                 [y + 2, z + 3, x + 1]
(%i4) random_permutation ({x + 1, y + 2, z + 3});
(%o4)                 [x + 1, y + 2, z + 3]
Função: rreduce (F, s)
Função: rreduce (F, s, s_{n + 1})

Extende a função de dois argumentos F para uma função de n argumentos usando composição de funções, onde s é uma lista.

rreduce(F, s) retorna F(s_1, ... F(s_{n - 2}, F(s_{n - 1}, s_n))). Quando o argumetno opcional s_{n + 1} estiver presente, o resultado é equivalente a rreduce(F, endcons(s_{n + 1}, s)).

A função F é primeiro aplicada à lista de elementos mais à direita - rightmost, daí o nome "rreduce".

Veja também lreduce, tree_reduce, e xreduce.

Exemplos:

rreduce sem o argumento opcional.

(%i1) rreduce (f, [1, 2, 3]);
(%o1)                     f(1, f(2, 3))
(%i2) rreduce (f, [1, 2, 3, 4]);
(%o2)                  f(1, f(2, f(3, 4)))

rreduce com o argumetno opcional.

(%i1) rreduce (f, [1, 2, 3], 4);
(%o1)                  f(1, f(2, f(3, 4)))

rreduce aplicada a operadores de dois argumentos internos ( definidos por padrão) ao Maxima. / é o operadro de divisão.

(%i1) rreduce ("^", args ({a, b, c, d}));
                                 d
                                c
                               b
(%o1)                         a
(%i2) rreduce ("/", args ({a, b, c, d}));
                               a c
(%o2)                          ---
                               b d
Função: setdifference (a, b)

Retorna um conjunto contendo os elementos no conjunto a que não estãono conjunto b.

setdifference reclama se ou a ou b não for um conjunto literal.

Exemplos:

(%i1) S_1 : {a, b, c, x, y, z};
(%o1)                  {a, b, c, x, y, z}
(%i2) S_2 : {aa, bb, c, x, y, zz};
(%o2)                 {aa, bb, c, x, y, zz}
(%i3) setdifference (S_1, S_2);
(%o3)                       {a, b, z}
(%i4) setdifference (S_2, S_1);
(%o4)                     {aa, bb, zz}
(%i5) setdifference (S_1, S_1);
(%o5)                          {}
(%i6) setdifference (S_1, {});
(%o6)                  {a, b, c, x, y, z}
(%i7) setdifference ({}, S_1);
(%o7)                          {}
Função: setequalp (a, b)

Retorna true se os conjuntos a e b possuirem o mesmo número de elementos e is(x = y) for true para x nos elementos de a e y nos elementos de b, considerados na ordem determinada por listify. De outra forma, setequalp retorna false.

Exemplos:

(%i1) setequalp ({1, 2, 3}, {1, 2, 3});
(%o1)                         true
(%i2) setequalp ({a, b, c}, {1, 2, 3});
(%o2)                         false
(%i3) setequalp ({x^2 - y^2}, {(x + y) * (x - y)});
(%o3)                         false
Função: setify (a)

Constrói um conjunto de elementos a partir da lista a. Elementos duplicados da lista a são apagados e os elementos são ordenados de acordo com o predicado orderlessp.

setify reclama se a não for uma lista literal.

Exemplos:

(%i1) setify ([1, 2, 3, a, b, c]);
(%o1)                  {1, 2, 3, a, b, c}
(%i2) setify ([a, b, c, a, b, c]);
(%o2)                       {a, b, c}
(%i3) setify ([7, 13, 11, 1, 3, 9, 5]);
(%o3)                {1, 3, 5, 7, 9, 11, 13}
Função: setp (a)

Retorna true se e somente se a for um conjunto na interpretação do Maxima.

setp retorna true para conjuntos não simplificados (isto é, conjuntos com elementos redundantes) e também para conjuntos simplificados.

setp é equivalente à função do Maxima setp(a) := not atom(a) and op(a) = 'set.

Exemplos:

(%i1) simp : false;
(%o1)                         false
(%i2) {a, a, a};
(%o2)                       {a, a, a}
(%i3) setp (%);
(%o3)                         true
Função: set_partitions (a)
Função: set_partitions (a, n)

Retorna o conjunto de todas as partições de a, ou um subconjunto daquele conjunto de partições.

set_partitions(a, n) retorna um conjunto de todas as decomposições de a em n subconjutnos disjuntos não vazios.

set_partitions(a) retorna o conjunto de todas as partições.

stirling2 retorna a cardinalidade de um conjuntode partições de um conjunto.

Um conjunto de conjuntos \(P\) é uma partição de um conjunto \(S\) quando

  1. cada elemento de \(P\) é um conjunto não vazio,
  2. elementos distintos de \(P\) são disjuntos,
  3. a união dos elementos de \(P\) é igual a \(S\).

Exemplos:

O conjunto vazio é uma partição de si mesmo, as ondições 1 e 2 são "vaziamente" verdadeiras.

(%i1) set_partitions ({});
(%o1)                         {{}}

A cardinalidade do conjunto de partições de um conjunto pode ser encontrada usando stirling2.

(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$ 
(%i3) cardinality(p) = stirling2 (6, 3);
(%o3)                        90 = 90

Cada elemento de p pode ter n = 3 elementos; vamos verificar.

(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$ 
(%i3) map (cardinality, p);
(%o3)                          {3}

Finalmente, para cada elementos de p, a união de seus elementos possivelmente será igua a s; novamente vamos comprovar.

(%i1) s: {0, 1, 2, 3, 4, 5}$
(%i2) p: set_partitions (s, 3)$ 
(%i3) map (lambda ([x], apply (union, listify (x))), p);
(%o3)                 {{0, 1, 2, 3, 4, 5}}
Função: some (f, a)
Função: some (f, L_1, ..., L_n)

Retorna true se o predicado f for true para um ou mais argumentos dados.

Given one set as the second argument, some(f, s) returns true if is(f(a_i)) returns true for one or more a_i in s. some may or may not evaluate f for all a_i in s. Since sets are unordered, some may evaluate f(a_i) in any order.

Dadas uma ou mais listas como argumentos, some(f, L_1, ..., L_n) retorna true se is(f(x_1, ..., x_n)) retornar true para um ou mais x_1, ..., x_n em L_1, ..., L_n, respectivamente. some pode ou não avaliar f para algumas combinações x_1, ..., x_n. some avalia listas na ordem do índice de incremento.

Dado um conjunto vazio {} ou uma lista vazia [] como argumentos, some retorna false.

Quando o sinalizador global maperror for true, todas as listas L_1, ..., L_n devem ter obrigatóriamente comprimentos iguais. Quando maperror for false, argumentos do tipo lista são efetivamente truncados para o comprimento da menor lista.

Retorna o valor de um predicado f o qual avalia (por meio de is) para alguma coisa outra que não true ou false e são governados pelo sinalizador global prederror. Quando prederror for true, tais valores são tratados como false. Quando prederror for false, tais valores são tratados como unknown (desconhecidos).

Exemplos:

some aplicado a um conjunto simples. O predicado é uma função de um argumento.

(%i1) some (integerp, {1, 2, 3, 4, 5, 6});
(%o1)                         true
(%i2) some (atom, {1, 2, sin(3), 4, 5 + y, 6});
(%o2)                         true

some aplicada a duas listas. O predicado é uma função de dois argumentos.

(%i1) some ("=", [a, b, c], [a, b, c]);
(%o1)                         true
(%i2) some ("#", [a, b, c], [a, b, c]);
(%o2)                         false

Retorna o valor do predicado f o qual avalia para alguma coisa que não true ou false e são governados através do sinalizador global prederror.

(%i1) prederror : false;
(%o1)                         false
(%i2) map (lambda ([a, b], is (a < b)), [x, y, z], [x^2, y^2, z^2]);
(%o2)              [unknown, unknown, unknown]
(%i3) some ("<", [x, y, z], [x^2, y^2, z^2]);
(%o3)                        unknown
(%i4) some ("<", [x, y, z], [x^2, y^2, z + 1]);
(%o4)                         true
(%i5) prederror : true;
(%o5)                         true
(%i6) some ("<", [x, y, z], [x^2, y^2, z^2]);
(%o6)                         false
(%i7) some ("<", [x, y, z], [x^2, y^2, z + 1]);
(%o7)                         true
Função: stirling1 (n, m)

Representa o número de Stirling de primeiro tipo.

Quando n e m forem não negativos inteiros, a magnitude de stirling1 (n, m) é o número de permutações de um conjunto com n elementos que possui m ciclos. Para detalhes, veja Graham, Knuth e Patashnik Concrete Mathematics. Maxima utiliza uma relação recursiva para definir stirling1 (n, m) para m menor que 0; stirling1 não é definida para n menor que 0 e para argumetnos não inteiros.

stirling1 é uma função de simplificação. Maxima conhece as seguintes identidades:

  1. \(stirling1(0, n) = kron_delta(0, n)\) (Ref. [1])
  2. \(stirling1(n, n) = 1\) (Ref. [1])
  3. \(stirling1(n, n - 1) = binomial(n, 2)\) (Ref. [1])
  4. \(stirling1(n + 1, 0) = 0\) (Ref. [1])
  5. \(stirling1(n + 1, 1) = n!\) (Ref. [1])
  6. \(stirling1(n + 1, 2) = 2^n - 1\) (Ref. [1])

Essas identidades são aplicadas quando os argumentos forem inteiros literais ou símbolos declarados como inteiros, e o primeiro argumento for não negativo. stirling1 não simplififca para argumentos não inteiros.

Referências:

[1] Donald Knuth, The Art of Computer Programming, terceira edição, Volume 1, Seção 1.2.6, Equações 48, 49, e 50.

Exemplos:

(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling1 (n, n);
(%o3)                           1

stirling1 não simplifica para argumentos não inteiros.

(%i1) stirling1 (sqrt(2), sqrt(2));
(%o1)              stirling1(sqrt(2), sqrt(2))

Maxima aplica identidades a stirling1.

(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling1 (n + 1, n);
                            n (n + 1)
(%o3)                       ---------
                                2
(%i4) stirling1 (n + 1, 1);
(%o4)                          n!
Função: stirling2 (n, m)

Representa o número de Stirling de segundo tipo.

Quando n e m forem inteiros não negativos, stirling2 (n, m) é o número de maneiras através dos quais um conjunto com cardinalidade n pode ser particionado em m subconjuntos disjuntos. Maxima utiliza uma relação recursiva para definir stirling2 (n, m) para m menor que 0; stirling2 é indefinida para n menor que 0 e para argumentos não inteiros.

stirling2 é uma função de simplificação. Maxima conhece as seguintes identidades.

  1. \(stirling2(0, n) = kron_delta(0, n)\) (Ref. [1])
  2. \(stirling2(n, n) = 1\) (Ref. [1])
  3. \(stirling2(n, n - 1) = binomial(n, 2)\) (Ref. [1])
  4. \(stirling2(n + 1, 1) = 1\) (Ref. [1])
  5. \(stirling2(n + 1, 2) = 2^n - 1\) (Ref. [1])
  6. \(stirling2(n, 0) = kron_delta(n, 0)\) (Ref. [2])
  7. \(stirling2(n, m) = 0\) when \(m > n\) (Ref. [2])
  8. \(stirling2(n, m) = sum((-1)^(m - k) binomial(m k) k^n,i,1,m) / m!\) onde \(m\) e \(n\) são inteiros, e \(n\) é não negativo. (Ref. [3])

Essas identidades são aplicadas quando os argumentos forem inteiros literais ou símbolos declarados como inteiros, e o primeiro argumento for não negativo. stirling2 não simplifica para argumentos não inteiros.

Referências:

[1] Donald Knuth. The Art of Computer Programming, terceira edição, Volume 1, Seção 1.2.6, Equações 48, 49, e 50.

[2] Graham, Knuth, e Patashnik. Concrete Mathematics, Tabela 264.

[3] Abramowitz e Stegun. Handbook of Mathematical Funçãos, Seção 24.1.4.

Exemplos:

(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling2 (n, n);
(%o3)                           1

stirling2 não simplifica para argumentos não inteiros.

(%i1) stirling2 (%pi, %pi);
(%o1)                  stirling2(%pi, %pi)

Maxima aplica identidades a stirling2.

(%i1) declare (n, integer)$
(%i2) assume (n >= 0)$
(%i3) stirling2 (n + 9, n + 8);
                         (n + 8) (n + 9)
(%o3)                    ---------------
                                2
(%i4) stirling2 (n + 1, 2);
                              n
(%o4)                        2  - 1
Função: subset (a, f)

Retorna o subconjuntode um conjunto a que satisfaz o predicado f.

subset returns um conjunto which comprises the elements of a for which f returns anything other than false. subset does not apply is to the return value of f.

subset reclama se a não for um conjunto literal.

See also partition_set.

Exemplos:

(%i1) subset ({1, 2, x, x + y, z, x + y + z}, atom);
(%o1)                     {1, 2, x, z}
(%i2) subset ({1, 2, 7, 8, 9, 14}, evenp);
(%o2)                      {2, 8, 14}
Função: subsetp (a, b)

Retorna true se e somente se o conjunto a for um subconjunto de b.

subsetp reclama se ou a ou b não forem um conjunto literal.

Exemplos:

(%i1) subsetp ({1, 2, 3}, {a, 1, b, 2, c, 3});
(%o1)                         true
(%i2) subsetp ({a, 1, b, 2, c, 3}, {1, 2, 3});
(%o2)                         false
Função: symmdifference (a_1, ..., a_n)

Retorna a diferença simétrica, isto é, o conjunto dos elemetnos que ocorrem em exatamente um conjunto a_k.

Given two arguments, symmdifference(a, b) is the same as union(setdifference(a, b), setdifference(b, a)).

symmdifference reclama se any argument não for um conjunto literal.

Exemplos:

(%i1) S_1 : {a, b, c};
(%o1)                       {a, b, c}
(%i2) S_2 : {1, b, c};
(%o2)                       {1, b, c}
(%i3) S_3 : {a, b, z};
(%o3)                       {a, b, z}
(%i4) symmdifference ();
(%o4)                          {}
(%i5) symmdifference (S_1);
(%o5)                       {a, b, c}
(%i6) symmdifference (S_1, S_2);
(%o6)                        {1, a}
(%i7) symmdifference (S_1, S_2, S_3);
(%o7)                        {1, z}
(%i8) symmdifference ({}, S_1, S_2, S_3);
(%o8)                        {1, z}
Função: tree_reduce (F, s)
Função: tree_reduce (F, s, s_0)

Extende a função binária F a uma função enária através de composição, onde s é um conjunto ou uma lista.

tree_reduce é equivalente ao seguinte: Aplicar F a sucessivos pares de elementos para formar uma nova lista [F(s_1, s_2), F(s_3, s_4), ...], mantendo o elemento final inalterado caso haja um número ímpar de elementos. Repetindo então o processo até que a lista esteja reduzida a um elemento simples, o qual é o valor de retorno da função.

Quando o argumento opcional s_0 estiver presente, o resultado é equivalente a tree_reduce(F, cons(s_0, s).

Para adições em ponto flutuante, tree_reduce pode retornar uma soma que possui um menor ero de arredondamento que rreduce ou lreduce.

Os elementos da lista s e os resultados parciais podem ser arranjados em uma árvore binária de profundidade mínima, daí o nome "tree_reduce".

Exemplos:

tree_reduce aplicada a uma lista com um número par de elementos.

(%i1) tree_reduce (f, [a, b, c, d]);
(%o1)                  f(f(a, b), f(c, d))

tree_reduce aplicada a uma lista com um número ímpar de elementos.

(%i1) tree_reduce (f, [a, b, c, d, e]);
(%o1)               f(f(f(a, b), f(c, d)), e)
Função: union (a_1, ..., a_n)

Retorna a união dos conjuntos de a_1 a a_n.

union() (sem argumentos) retorna o conjunto vazio.

union reclama se qualquer argumento não for um conjunto literal.

Exemplos:

(%i1) S_1 : {a, b, c + d, %e};
(%o1)                   {%e, a, b, d + c}
(%i2) S_2 : {%pi, %i, %e, c + d};
(%o2)                 {%e, %i, %pi, d + c}
(%i3) S_3 : {17, 29, 1729, %pi, %i};
(%o3)                {17, 29, 1729, %i, %pi}
(%i4) union ();
(%o4)                          {}
(%i5) union (S_1);
(%o5)                   {%e, a, b, d + c}
(%i6) union (S_1, S_2);
(%o6)              {%e, %i, %pi, a, b, d + c}
(%i7) union (S_1, S_2, S_3);
(%o7)       {17, 29, 1729, %e, %i, %pi, a, b, d + c}
(%i8) union ({}, S_1, S_2, S_3);
(%o8)       {17, 29, 1729, %e, %i, %pi, a, b, d + c}
Função: xreduce (F, s)
Função: xreduce (F, s, s_0)

Extendendo a função F para uma função enária por composição, ou, se F já for enária, aplica-se F a s. Quando F não for enária, xreduce funciona da mesma forma que lreduce. O argumento s é uma lista.

Funções sabidamente enárias inclui adição +, multiplicação *, and, or, max, min, e append. Funções podem também serem declaradas enárias por meio de declare(F, nary). Para essas funções, é esperado que xreduce seja mais rápida que ou rreduce ou lreduce.

Quando o argumento opcional s_0 estiver presente, o resultado é equivalente a xreduce(s, cons(s_0, s)).

Adições em ponto flutuante não são exatamente associativas; quando a associatividade ocorrer, xreduce aplica a adição enária do Maxima quando s contiver números em ponto flutuante.

Exemplos:

xreduce aplicada a uma função sabidamente enária. F é chamada uma vez, com todos os argumentos.

(%i1) declare (F, nary);
(%o1)                         done
(%i2) F ([L]) := L;
(%o2)                      F([L]) := L
(%i3) xreduce (F, [a, b, c, d, e]);
(%o3)         [[[[[("[", simp), a], b], c], d], e]

xreduce aplicada a uma função não sabidamente enária. G é chamada muitas vezes, com dois argumentos de cada vez.

(%i1) G ([L]) := L;
(%o1)                      G([L]) := L
(%i2) xreduce (G, [a, b, c, d, e]);
(%o2)         [[[[[("[", simp), a], b], c], d], e]
(%i3) lreduce (G, [a, b, c, d, e]);
(%o3)                 [[[[a, b], c], d], e]

Anterior: , Acima: Conjuntos   [Conteúdo][Índice]

Informação da licença Javascript