En programación de computadoras , append
es la operación para concatenar listas o arreglos enlazados en algunos lenguajes de programación de alto nivel .
Ceceo
Append
se origina en el lenguaje de programación Lisp . El append
procedimiento toma cero o más listas (vinculadas) 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 deelementos. Por lo tanto, puede ser una fuente de ineficiencia si se usa imprudentemente en el código.
El nconc
procedimiento (llamado append!
en Scheme ) realiza la misma función append
, pero de forma destructiva : altera el cdr de cada argumento (guarda el último), apuntándolo a la siguiente lista.
Implementación
Append
se puede definir fácilmente de forma recursiva en términos de cons
. La siguiente es una implementación simple en Scheme, solo para dos argumentos:
( definir agregar ( lambda ( ls1 ls2 ) ( si ( nulo? ls1 ) ls2 ( contras ( car ls1 ) ( agregar ( cdr ls1 ) ls2 )))))
Adjuntar también se puede implementar usando pliegue a la derecha:
( definir añadir ( lambda ( a b ) ( plegar a la derecha contras b a )))
Otros idiomas
Siguiendo a Lisp, otros lenguajes de alto nivel que presentan listas enlazadas como estructuras de datos primitivas han adoptado un append
. Haskell usa el ++
operador para agregar listas. OCaml usa el @
operador para agregar listas.
Otros lenguajes usan los símbolos +
o ++
para la concatenación de cadenas / listas / matrices no destructivas .
Prólogo
El lenguaje de programación lógica Prolog presenta un append
predicado incorporado , 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. Vocación
? - 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 = []
Miranda
Este pliegue derecho , 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 contras [3,4] [1,2] = (reducir contras [3,4]) (contras 1 (contras 2 nil)) = contras 1 (contras 2 [3,4])) (reemplazando contras por contras y nil por [3,4]) = [1,2,3,4]
Haskell
Este doblez a la derecha tiene el mismo efecto que la implementación de Scheme anterior:
Anexar :: [ a ] -> [ a ] -> [ a ] Anexar xs ys = foldr ( : ) ys XS
Esto es esencialmente una reimplementación del ++
operador de Haskell .
Perl
En Perl , la función push es equivalente al método append y se puede usar de la siguiente manera.
my @list ; empujar @list , 1 ; empujar @list , 2 , 3 ;
El resultado final es una lista que contiene [1, 2, 3]
La función unshift se agrega al principio de una lista, en lugar de al final
my @list ; desshift @list , 1 ; desshift @list , 2 , 3 ;
El resultado final es una lista que contiene [2, 3, 1]
Al abrir un archivo, use el modo ">>" para agregar en lugar de sobreescribir.
open ( my $ fh , '>>' , "/alguno/archivo.txt" ); print $ 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.
Pitón
En Python , use el método de lista "extender" o los operadores infijos + y + = para agregar listas.
l = [ 1 , 2 ] l . extender ([ 3 , 4 , 5 ]) imprimir l + [ 6 , 7 ]
Después de ejecutar este código, l es una lista que contiene [1, 2, 3, 4, 5], mientras que la salida generada es la lista [1, 2, 3, 4, 5, 6, 7].
No lo confunda con el método de lista "agregar", que agrega un solo elemento a una lista:
l = [ 1 , 2 ] l . añadir ( 3 )
Aquí, el resultado es una lista que contiene [1, 2, 3].
Intento
En Bash, la redirección anexa es el uso de ">>" para agregar una secuencia a algo, como en la siguiente serie de comandos de shell:
echo ¡Hola mundo! > texto ; echo ¡ Adiós mundo! >> texto ; texto de gato
La corriente "¡Adiós mundo!" se agrega al archivo de texto escrito en el primer comando. La ";" implica la ejecución de los comandos dados en orden no simultáneamente. Entonces, el contenido final del archivo de texto es:
¡Hola Mundo!
¡Adiós mundo!
Referencias
- Hughes, John. 1989. Por qué es importante la programación funcional. 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, segunda edición . 1990. pág. 418, descripción de
append
.