Anexo - Append
Na programação de computadores , append
é a operação para concatenar listas ou matrizes vinculadas em algumas linguagens de programação de alto nível .
Lisp
Append
tem origem na linguagem de programação Lisp . O append
procedimento leva zero ou mais listas (vinculadas) como argumentos e retorna a concatenação dessas listas.
(append '(1 2 3) '(a b) '() '(6))
;Output: (1 2 3 a b 6)
Uma vez que o append
procedimento deve copiar completamente todos os seus argumentos, exceto o último, sua complexidade de tempo e espaço são O ( n ) para uma lista de elementos. Portanto, pode ser uma fonte de ineficiência se usado de forma imprudente no código.
O nconc
procedimento (chamado append!
em Scheme ) desempenha a mesma função append
, mas de forma destrutiva : altera o cdr de cada argumento (salva o último), apontando-o para a próxima lista.
Implementação
Append
pode ser facilmente definido recursivamente em termos de cons
. O que se segue é uma implementação simples no Scheme, apenas para dois argumentos:
(define append
(lambda (ls1 ls2)
(if (null? ls1)
ls2
(cons (car ls1) (append (cdr ls1) ls2)))))
Append também pode ser implementado usando fold-right:
(define append
(lambda (a b)
(fold-right cons b a)))
Outras línguas
Seguindo o Lisp, outras linguagens de alto nível que apresentam listas vinculadas como estruturas de dados primitivas adotaram um append
. Haskell usa o ++
operador para anexar listas. OCaml usa o @
operador para anexar listas.
Outras linguagens usam os símbolos +
ou ++
para concatenação de string / lista / array não destrutiva .
Prolog
A linguagem de programação lógica Prolog apresenta um append
predicado integrado , que pode ser implementado da seguinte forma:
append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]) :-
append(Xs,Ys,Zs).
Este predicado pode ser usado para anexar, mas também para separar listas. Chamando
?- append(L,R,[1,2,3]).
produz as soluções:
L = [], R = [1, 2, 3] ; L = [1], R = [2, 3] ; L = [1, 2], R = [3] ; L = [1, 2, 3], R = []
Miranda
Esta dobra direita , de Hughes (1989: 5-6), tem a mesma semântica (por exemplo) que a implementação de Scheme acima, para dois argumentos.
append a b = reduce cons b a
Onde reduzir é o nome de Miranda para dobra e contras constrói uma lista a partir de dois valores ou listas.
Por exemplo,
append [1,2] [3,4] = reduce cons [3,4] [1,2] = (reduce cons [3,4]) (cons 1 (cons 2 nil)) = cons 1 (cons 2 [3,4])) (replacing cons by cons and nil by [3,4]) = [1,2,3,4]
Haskell
Esta dobra à direita tem o mesmo efeito que a implementação do Esquema acima:
append :: [a] -> [a] -> [a]
append xs ys = foldr (:) ys xs
Esta é essencialmente uma reimplementação do ++
operador de Haskell .
Perl
Em Perl , a função push é equivalente ao método append e pode ser usada da seguinte maneira.
my @list;
push @list, 1;
push @list, 2, 3;
O resultado final é uma lista contendo [1, 2, 3]
A função unshift anexa ao início de uma lista, ao invés do final
my @list;
unshift @list, 1;
unshift @list, 2, 3;
O resultado final é uma lista contendo [2, 3, 1]
Ao abrir um arquivo, use o modo ">>" para anexar em vez de sobrescrever.
open(my $fh, '>>', "/some/file.txt");
print $fh "Some new text\n";
close $fh;
Observe que ao abrir e fechar identificadores de arquivo, deve-se sempre verificar o valor de retorno.
Pitão
Em Python , use o método de lista "extend" ou os operadores infixo + e + = para anexar listas.
l = [1, 2]
l.extend([3, 4, 5])
print l + [6, 7]
Depois de executar este código, l é uma lista contendo [1, 2, 3, 4, 5], enquanto a saída gerada é a lista [1, 2, 3, 4, 5, 6, 7].
Não confunda com o método de lista "append", que adiciona um único elemento a uma lista:
l = [1, 2]
l.append(3)
Aqui, o resultado é uma lista contendo [1, 2, 3].
Bash
No Bash, o redirecionamento de acréscimo é o uso de ">>" para adicionar um fluxo a algo, como na seguinte série de comandos de shell:
echo Hello world! >text; echo Goodbye world! >>text; cat text
O fluxo "Adeus mundo!" é adicionado ao arquivo de texto escrito no primeiro comando. O ";" implica a execução dos comandos dados em ordem não simultaneamente. Portanto, o conteúdo final do arquivo de texto é:
Olá Mundo!
Adeus mundo!
Referências
- Hughes, John. 1989. Por que a programação funcional é importante. Computer Journal 32 , 2, 98-107. https://web.archive.org/web/20070413005952/http://www.math.chalmers.se/~rjmh/Papers/whyfp.pdf
- Steele, Guy L. Jr. Common Lisp : The Language, Second Edition . 1990. pg. 418, descrição de
append
.