En programación informática , append
es la operación de concatenar listas enlazadas o matrices en algunos lenguajes de programación de alto nivel .
Append
Tiene su origen en el lenguaje de programación Lisp . El append
procedimiento toma cero o más listas (enlazadas) como argumentos y devuelve la concatenación de estas listas.
( añadir ' ( 1 2 3 ) ' ( a b ) ' () ' ( 6 )) ;Salida: (1 2 3 ab 6)
Dado que el append
procedimiento debe copiar completamente todos sus argumentos excepto el último, tanto su complejidad temporal como espacial son O( n ) para una lista de elementos. Por lo tanto, puede ser una fuente de ineficiencia si se utiliza de manera imprudente en el código.
El nconc
procedimiento (llamado append!
en Scheme ) realiza la misma función que append
, pero de forma destructiva : altera el cdr de cada argumento (excepto el último), apuntándolo a la siguiente lista.
Append
se puede definir fácilmente de forma recursiva en términos de cons
. La siguiente es una implementación simple en Scheme, para solo dos argumentos:
( definir agregar ( lambda ( ls1 ls2 ) ( si ( nulo? ls1 ) ls2 ( cons ( coche ls1 ) ( agregar ( cdr ls1 ) ls2 )))))
La función de anexar también se puede implementar usando fold-right:
( definir append ( lambda ( a b ) ( fold-right cons b a )))
Después de Lisp, otros lenguajes de programación de alto nivel que utilizan listas enlazadas como estructuras de datos primitivas han adoptado un operador append
. Para añadir listas, como operador , Haskell utiliza ++
, OCaml utiliza @
.
Otros lenguajes utilizan los símbolos +
o para concatenar de forma no destructiva una cadena , lista o matriz. ++
El lenguaje de programación lógica Prolog cuenta con un predicado incorporado append
, que se puede implementar de la siguiente manera:
añadir ([], Ys , Ys ). añadir ([ X | Xs ], Ys ,[ X | Zs ]) :- añadir ( Xs , Ys , Zs ).
Este predicado se puede utilizar para agregar, pero también para separar listas.
?- añadir ( L , R ,[ 1 , 2 , 3 ]).
produce las soluciones:
L = [], R = [1, 2, 3] ;L = [1], R = [2, 3] ;L = [1, 2], R = [3] ;L = [1, 2, 3], R = []
En Miranda , este pliegue a la derecha , de Hughes (1989:5-6), tiene la misma semántica (por ejemplo) que la implementación de Scheme anterior, para dos argumentos.
añadir ab = reducir cons ba
Donde reduce es el nombre de Miranda para fold , y cons construye una lista a partir de dos valores o listas.
Por ejemplo,
añadir [1,2] [3,4] = reducir cons [3,4] [1,2] = (reducir cons [3,4]) (cons 1 (cons 2 nulo)) = contras 1 (contras 2 [3,4])) (reemplazando cons por cons y nil por [3,4]) = [1,2,3,4]
En Haskell , este pliegue a la derecha tiene el mismo efecto que la implementación de Scheme anterior:
añadir :: [ a ] -> [ a ] -> [ a ] añadir xs ys = foldr ( : ) ys xs
Esto es esencialmente una reimplementación del operador de Haskell ++
.
En Perl , la función push es equivalente al método append y se puede utilizar de la siguiente manera.
mi @lista ; empujar @lista , 1 ; empujar @lista , 2 , 3 ;
El resultado final es una lista que contiene [1, 2, 3]
La función unshift agrega elementos al principio de una lista, en lugar de al final.
mi @lista ; anular desplazamiento @lista , 1 ; anular desplazamiento @lista , 2 , 3 ;
El resultado final es una lista que contiene [2, 3, 1]
Al abrir un archivo, utilice el modo ">>" para agregar en lugar de sobrescribir.
abrir ( mi $fh , '>>' , "/algún/archivo.txt" ); imprimir $fh "Algún texto nuevo\n" ; cerrar $fh ;
Tenga en cuenta que al abrir y cerrar identificadores de archivos, siempre se debe verificar el valor de retorno.
En Python , utilice el método de lista extend
o los operadores infijos +
y +=
para agregar listas.
>>> l = [ 1 , 2 ] >>> l . extender ([ 3 , 4 , 5 ]) >>> l [1, 2, 3, 4, 5] >>> l + [ 6 , 7 ] [1, 2, 3, 4, 5, 6, 7]
No confunda con el método de lista append
, que agrega un solo elemento a una lista:
>>> l = [ 1 , 2 ] >>> l . agregar ( 3 ) >>> l [1, 2, 3]
En Bash, la redirección de anexo es el uso de ">>" para agregar un flujo a algo, como en la siguiente serie de comandos de shell:
echo Hola mundo! >texto ; echo Adiós mundo! >>texto ; gato texto
El flujo "¡Adiós mundo!" se añade al archivo de texto escrito en el primer comando. El ";" implica la ejecución de los comandos dados en orden, no simultáneamente. Por lo tanto, el contenido final del archivo de texto es:
¡Hola mundo! ¡Adiós mundo!
{{cite journal}}
: Citar revista requiere |journal=
( ayuda ) Descripción de append
.