Articulo de referencia

Concatenación

La función de concatenación ("&") de una hoja de cálculo se utiliza para ensamblar una cadena de texto compleja; en este ejemplo, código XML para un elemento SVG "círculo". En l...

La función de concatenación ("&") de una hoja de cálculo se utiliza para ensamblar una cadena de texto compleja; en este ejemplo, código XML para un elemento SVG "círculo".

En la teoría del lenguaje formal y la programación informática , la concatenación es la operación de unir objetos secuenciales, como cadenas de caracteres , archivos , listas o fragmentos de audio o vídeo , de extremo a extremo. Por ejemplo, la concatenación de "nieve" y "pelota" es "bola de nieve". En ciertas formalizaciones de la teoría de la concatenación , también llamada teoría de cadenas, la concatenación de cadenas es una noción primitiva .

Terminología

Concatenar consiste en unir dos o más objetos secuenciales para crear un nuevo objeto, generalmente sin modificar ninguno de los objetos originales .

Agregar un elemento a una lista consiste en modificar una secuencia añadiendo material al final. Así, agregar `a` a `b` implica modificar `b` para que sea igual a la concatenación de los valores originales de `b` y `a` . Sin embargo, en algunos lenguajes de programación de alto nivel , especialmente los funcionales y lógicos, appendla operación de concatenar listas o matrices se realiza sin modificar los elementos originales.

Anteponer consiste en modificar un objeto secuencial añadiendo material al principio. Por lo tanto, anteponer a a b significa modificar b para que sea igual a la concatenación de a y el valor original de b .

Sintaxis

En muchos lenguajes de programación , la concatenación de cadenas es un operador infijo binario , y en algunos se escribe sin operador. Esto se implementa de diferentes maneras:

  • Sobrecarga del signo más +Ejemplo de C#: "Hello, " + "World"tiene el valor "Hello, World".
  • Operador dedicado, como .en PHP , &en Visual Basic , [ 1 ]|| en SQL [ 2 ] [ 3 ] y ~en D. [ 4 ] Las ventajas sobre la reutilización +pueden incluir la compatibilidad con la conversión implícita de tipos a cadenas y la distinción entre la concatenación de matrices/listas numéricas y la suma de vectores , según el lenguaje.
  • concatenación literal de cadena , lo que significa que las cadenas adyacentes se concatenan sin ningún operador. Ejemplo de C: "Hello, " "World"tiene el valor "Hello, World".
  • Interpolación , utilizando un interpolador de cadenas para concatenar. Ejemplo de C#: $"{hello}{world}", donde string hello = "Hello, ";ystring world = "World";
  • Formateo, utilizando un formateador de cadenas para concatenar. Ejemplo de Java:String.format("%s%s", "Hello, ", "World")

En muchas publicaciones científicas o estándares, la notación del operador de concatenación utilizada es ||. [ 5 ]

Ceceo

El appendprocedimiento toma como argumentos cero o más listas (enlazadas) y devuelve la concatenación de estas listas.

( agregar ' ( 1 2 3 ) ' ( a b ) ' () ' ( 6 )) ;Salida: (1 2 3 ab 6)

Dado que el appendprocedimiento debe copiar completamente todos sus argumentos excepto el último, tanto su complejidad temporal como espacial son O( n ) para una lista denorte{\displaystyle n}elementos. Por lo tanto, puede ser una fuente de ineficiencia si se usa de forma imprudente en el código.

El nconcprocedimiento (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.

Implementación

Appendse 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:

( define append ( lambda ( ls1 ls2 ) ( if ( null? ls1 ) ls2 ( cons ( car ls1 ) ( append ( cdr ls1 ) ls2 )))))

La función de añadir también se puede implementar utilizando fold-right:

( define append ( lambda ( a b ) ( fold-right cons b a )))

Prólogo

El lenguaje de programación lógica Prolog incluye un predicado incorporado append, que puede implementarse de la siguiente manera:

agregar ([], Ys , Ys ). agregar ([ X | Xs ], Ys ,[ X | Zs ]) :- agregar ( Xs , Ys , Zs ).

Este predicado se puede utilizar para agregar elementos, pero también para separar elementos de listas. Llamando

?- agregar ( L , R ,[ 1 , 2 , 3 ]).

arroja las soluciones:

L = [], R = [1, 2, 3] ; L = [1], R = [2, 3] ; L = [1, 2], R = [3] ; L = [1, 2, 3], R = []

Miranda

En 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.

agregar ab = reducir cons ba

Donde reduce es el nombre que Miranda le da a fold , y cons construye una lista a partir de dos valores o listas.

Por ejemplo,

agregar [1,2] [3,4] = reducir cons [3,4] [1,2] = (reducir cons [3,4]) (cons 1 (cons 2 nulo)) = cons 1 (cons 2 [3,4])) (reemplazando cons por cons y nil por [3,4]) = [1,2,3,4]

Haskell

En Haskell , este pliegue a la derecha tiene el mismo efecto que la implementación de Scheme anterior:

agregar :: [ a ] ​​-> [ a ] ​​-> [ a ] ​​agregar xs ys = foldr ( : ) ys xs

Se trata esencialmente de una reimplementación del ++operador de Haskell.

Perl

En Perl , la función push es equivalente al método append y se puede utilizar de la siguiente manera.

mi @list ; push @list , 1 ; push @list , 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 @list ; unshift @list , 1 ; unshift @list , 2 , 3 ;

El resultado final es una lista que contiene [2, 3, 1].

Al abrir un archivo, utilice el modo ">>" para agregar contenido en lugar de sobrescribir.

abrir ( mi $fh , '>>' , "/some/file.txt" ); imprimir $fh "Algún texto nuevo\n" ; cerrar $fh ;

Tenga en cuenta que al abrir y cerrar descriptores de archivo, siempre se debe comprobar el valor de retorno.

Pitón

En Python , utilice el método de lista extendo los operadores infijos +y +=para agregar elementos a las listas.

>>> l = [ 1 , 2 ] >>> l . extend ([ 3 , 4 , 5 ]) >>> l [1, 2, 3, 4, 5] >>> l + [ 6 , 7 ] [1, 2, 3, 4, 5, 6, 7]

No confundir 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]

Intento

En Bash , la redirección append 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 ; texto del gato

La secuencia "¡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!

Otros idiomas

Otros lenguajes de programación de alto nivel que incluyen listas enlazadas como estructuras de datos primitivas han adoptado un operador . Para agregar listas, Haskell usa appendel operador , OCaml usa el operador . Otros lenguajes usan los símbolos o para concatenar de forma no destructiva una cadena , una lista o una matriz.++@+++

Implementación

En programación, la concatenación de cadenas generalmente se realiza en tiempo de ejecución, ya que los valores de las cadenas normalmente no se conocen hasta ese momento. Sin embargo, en el caso de los literales de cadena, los valores se conocen en tiempo de compilación, por lo que la concatenación de cadenas puede realizarse en tiempo de compilación, ya sea mediante la concatenación de literales de cadena o mediante la optimización de constantes , lo que representa una posible optimización en tiempo de ejecución.

Concatenación de conjuntos de cadenas

En la teoría del lenguaje formal y la coincidencia de patrones (incluidas las expresiones regulares ), la operación de concatenación de cadenas se generaliza a una operación sobre conjuntos de cadenas de la siguiente manera:

Para dos conjuntos de cadenas S 1 y S 2 , la concatenación S 1 S 2 consiste en todas las cadenas de la forma vw donde v es una cadena de S 1 y w es una cadena de S 2 , o formalmente S 1 S 2 = { vw  : vS 1 , wS 2 } . Muchos autores también utilizan la concatenación de un conjunto de cadenas y una sola cadena, y viceversa, que se definen de manera similar por S 1 w = { vw  : vS 1 } y vS 2 = { vw  : wS 2 } . En estas definiciones, la cadena vw es la concatenación ordinaria de las cadenas v y w como se define en la sección introductoria.

Por ejemplo, si F = { a, b, c, d, e, f, g, h } , y R = { 1, 2, 3, 4, 5, 6, 7, 8 } , entonces FR denota el conjunto de todas las coordenadas del tablero de ajedrez en notación algebraica , mientras que e R denota el conjunto de todas las coordenadas de la columna de los reyes .

En este contexto, los conjuntos de cadenas se denominan a menudo lenguajes formales. El operador de concatenación se suele expresar como una simple yuxtaposición (al igual que la multiplicación ).

Propiedades algebraicas

Las cadenas sobre un alfabeto, con la operación de concatenación, forman una estructura algebraica asociativa llamada monoide libre . El elemento identidad es la cadena nula .

Los conjuntos de cadenas con concatenación y alternancia forman un semianillo , donde la concatenación se distribuye sobre la alternancia. El elemento neutro para la alternancia (el elemento 0) es el conjunto vacío y el elemento neutro para la concatenación (el elemento 1) es el conjunto que contiene solo la cadena nula.

Aplicaciones

Audio y telefonía

En la programación de telefonía, la concatenación se utiliza para proporcionar retroalimentación de audio dinámica al usuario. Por ejemplo, en un reloj parlante que indica la hora , la concatenación se usa para dar la hora correcta reproduciendo las grabaciones correspondientes de forma concatenada. Por ejemplo: "al tono, serán las", "ocho", "treinta", "cinco", "y", "veinte", "cinco", "segundos".

Las grabaciones existen por separado, pero reproducirlas una tras otra proporciona al oyente una oración gramaticalmente correcta.

Esta técnica también se utiliza en anuncios de cambio de número, sistemas de correo de voz o la mayoría de las aplicaciones de telefonía que proporcionan información dinámica a la persona que llama (por ejemplo, moviefone , tellme y otras).

La programación de cualquier sistema de megafonía informatizado también puede emplear la concatenación para anuncios públicos dinámicos (por ejemplo, vuelos en un aeropuerto). El sistema archivaría grabaciones de voz con números, rutas o aerolíneas, destinos, horarios, etc., y las reproduciría en una secuencia específica para generar una frase gramaticalmente correcta que se anunciaría en todo el recinto.

teoría de bases de datos

Uno de los principios del diseño de bases de datos relacionales es que los campos de las tablas de datos deben reflejar una única característica del sujeto de la tabla, lo que significa que no deben contener cadenas concatenadas. Cuando se requiere concatenación en un informe, esta debe proporcionarse al momento de ejecutarlo. Por ejemplo, para mostrar la dirección física de un cliente, los datos podrían incluir el número de edificio, el nombre de la calle, el número de subunidad del edificio, el nombre de la ciudad, el nombre del estado/provincia, el código postal y el nombre del país, por ejemplo, "123 Fake St Apt 4, Boulder, CO 80302, USA", que combina siete campos. Sin embargo, la tabla de datos de clientes no debe usar un solo campo para almacenar esa cadena concatenada; en cambio, la concatenación de los siete campos debe realizarse al ejecutar el informe. La razón de estos principios es que, sin ellos, la entrada y actualización de grandes volúmenes de datos se vuelve propensa a errores y requiere mucho trabajo. Ingresar por separado la ciudad, el estado, el código postal y el país permite la validación de la entrada de datos (como la detección de una abreviatura de estado no válida). Luego, esos elementos separados se pueden usar para ordenar o indexar los registros, como por ejemplo todos aquellos que tengan "Boulder" como nombre de la ciudad.

matemáticas recreativas

En matemáticas recreativas , muchos problemas se refieren a las propiedades de los números bajo la concatenación de sus numerales en alguna base . Algunos ejemplos son los números primos básicos (primos obtenidos al factorizar repetidamente la concatenación creciente de factores primos de un número dado), los números de Smarandache-Wellin (las concatenaciones de los primeros números primos ) y las constantes de Champernowne y Copeland-Erdős (los números reales formados por las representaciones decimales de los enteros positivos y los números primos, respectivamente).

Véase también

Referencias

Citas

  1. "Operadores de concatenación en Visual Basic" . Guía de Visual Basic para .NET. Características del lenguaje: Operadores y expresiones . Microsoft. 2015.
  2. "SQL | Operador de concatenación" . geeksforgeeks.org . 12 de enero de 2018. Consultado el 11 de agosto de 2023 .
  3. "Operador de concatenación" . Documentación en línea de Oracle Database, versión 10g Release 2 (10.2) / Administración: Referencia SQL de la base de datos . Oracle.
  4. "Arreglos" . Lenguaje de programación D. Consultado el 4 de junio de 2026 .
  5. Moriarty, Kathleen; Kaliski, Burt; Jonsson, Jakob; Rusch, Aneas (noviembre de 2016). "2. Notación". PKCS #1: Especificaciones de criptografía RSA Versión 2.2 (Informe). Grupo de trabajo de ingeniería de Internet.

Fuentes

  • Hopcroft, John E .; Ullman, Jeffrey D. (1979). Introducción a la teoría de autómatas, lenguajes y computación . Addison-Wesley. ISBN 0-201-02988-X.
  • Corcoran, John ; Frank, William; Maloney, Michael (1974). "Teoría de cuerdas". Journal of Symbolic Logic . 39 (4): 625– 637. doi : 10.2307/2272846 . JSTOR 2272846. S2CID 2168826 .  

Bibliografía

  • Hughes, John (1989). "Por qué importa la programación funcional" (PDF) . Computer Journal . 32 (2): 98–107 . doi : 10.1093/comjnl/32.2.98 . Archivado del original (PDF) el 13 de abril de 2007.
  • Steele, Guy L. (1990). COMMON LISP: el lenguaje (2.ª  ed.). Bedford, Mass: Digital Press. pág.  418. ISBN 1-55558-041-6.