Descrição
Este é um artigo escrito por Jason McVeigh de Orillia, ON, CA. Este artigo foi escrito em resposta à entrada do blog e relacionamento com Gabor de Perl Maven Pro.
Jogos
Na programação de computadores, um conjunto é uma coleção de elementos distintos. Elementos únicos podem ser agrupados em um conjunto. Os conjuntos são representados em figuras como diagramas de Venn com cada um representado como um círculo contendo muitos elementos. Os conjuntos são uma estrutura de dados frequentemente usada na programação do mundo real. Os conjuntos estão prontamente disponíveis na linguagem de programação Perl. Este artigo é um exercício em conjuntos, teoria intuitiva dos conjuntos e propriedades dos conjuntos.
Definir Elementos
Se um elemento é membro de um conjunto, diz-se que esse elemento pertence a um conjunto ou que este elemento está em um conjunto. Conjuntos em Perl são usados para manter itens, dados, tags, referências ou estruturas de dados. A ordem dos elementos de um conjunto é de consequência zero. Um conjunto também pode ser considerado um elemento.
Este artigo
Com este artigo, os conjuntos são definidos e a teoria dos conjuntos intuitiva para encontrar a união, a interseção e a diferença dos conjuntos de exemplo é concluída na linguagem de programação Perl. Depois, propriedades importantes de um conjunto serão obtidas usando sub-rotinas comuns do Perl. Neste artigo, conjuntos contendo apenas strings serão usados.
Igualdade
Dois conjuntos A e B são definidos como iguais quando têm exatamente os mesmos elementos. Se cada elemento de A for um elemento de B e cada elemento de B for um elemento de A.
Conjuntos de exemplos
Em Perl, o uso de um array para trabalhar com conjuntos está bem documentado. Abaixo, dois arrays de elementos únicos são definidos da maneira Perl. Este código define um conjunto de loiras, identificadas como conjunto A, bem como um conjunto de pessoas canhotas, também conhecidas como canhotos, identificadas como conjunto B.
my @a = qw(Amber Micah Nicole Niomi Sarah Steven Alex Bruno Devin);
my @b = qw(Micah Sarah Steven Joey);
União
Dois conjuntos podem ser adicionados juntos. A união de A e B, é o conjunto de todos os elementos que são membros de A ou B. A união de A e B, neste exemplo, será a adição do conjunto de loiras e do conjunto de canhotos . O seguinte código-fonte Perl adicionará o conjunto A ao conjunto B, buscando a união de A e B.
my (%union,@union);
foreach my $item ((@a,@b)) {
$union{$item} = 1;
}
@union = keys %union;
Interseção
Um novo conjunto também pode ser construído determinando quais membros dois conjuntos têm em comum. A interseção de A e B é o conjunto de todos os elementos que são membros de A e B. A interseção de A e B, neste exemplo, serão as loiras cuja mão dominante é a esquerda. O seguinte código-fonte Perl encontrará os elementos que o conjunto A e o conjunto B têm em comum, buscando a interseção de A e B.
my @isect;
foreach my $item (@a) {
push @isect, $item if grep { $item eq $_ } @b;
}
Diferença
Dois conjuntos também podem ser subtraídos para encontrar a diferença. A diferença de A e B, é o conjunto de todos os elementos que são membros de A, mas não membros de B. A diferença de A e B, neste exemplo, serão as loiras que são destras ou mestiças mas não são canhotos. Observe que subtrair membros de um conjunto que não está no conjunto é permitido e de consequência zero.
my @difference;
foreach my $item (@a) {
push @difference, $item unless grep { $item eq $_ } @b;
}
Sub-rotinas para conjuntos em Perl
A seguir estão as sub-rotinas importantes usadas para trabalhar com conjuntos. Essas sub-rotinas expõem propriedades importantes de um conjunto para programadores Perl.
Criar conjunto a partir da matriz
A sub-rotina de criação criará um conjunto de itens exclusivos de uma matriz. O procedimento de criação é útil, pois usa um array antigo e simples e cria um conjunto de elementos exclusivos.
# usage: create_from(@array);
# returns @set
sub create_from {
my @a = @_;
my %seen = ();
my @uniq;
foreach my $item (@a) {
push(@uniq, $item) unless $seen{$item}++;
}
return @uniq;
}
O elemento está em jogo?
A sub-rotina, comumente intitulada é elemento de, é usada para verificar se um elemento está em um conjunto. Esta sub-rotina é escrita, usando a linguagem de programação Perl, com as seguintes linhas:
# usage: is_element_of($element,@set);
# returns 1 if $element is a member of @set
sub is_element_of {
my $item = shift;
return 1 if grep { $item eq $_ }@_;
}
O Conjunto Vazio
O conjunto vazio é um conjunto sem nenhum membro. O conjunto vazio é um conjunto constante. Existe apenas um conjunto vazio. É conhecido como conjunto vazio.
O conjunto vazio é retornado com esta sub-rotina. A sub-rotina empty_set é construída com Perl da seguinte maneira:
# usage: @e = empty_set();
# returns the empty set
sub empty_set {
return [];
}
A sub-rotina, comumente intitulada is_empty, verifica se o conjunto é o conjunto vazio. Esta sub-rotina é escrita da seguinte maneira:
# usage: is_empty(@set);
# returns 1 if @set is the empty set
sub is_empty {
return 1 if scalar @_ == 0;
}
Cardinalidade
Por fim, o número de elementos contidos em um conjunto é calculado com uma sub-rotina como esta:
# usage: cardinality(@set);
# returns the cardinality of @set
sub cardinality {
return scalar @_;
}
Resumo
Em resumo, a lógica de conjunto intuitiva realizará muitas tarefas e é totalmente acessível ao programador Perl. Os conjuntos são estruturas de dados fundamentais na programação de computadores. Neste artigo, a lógica de conjunto intuitiva foi usada para a dedução. Use essa habilidade adquirida para aprimorar a lógica de negócios ou funções de um script Perl.