Referencia circular - Circular reference

Una referencia circular es una serie de referencias donde el último objeto hace referencia al primero, lo que da como resultado un bucle cerrado.

Referencia circular (en rojo)

En idioma

Una referencia circular no debe confundirse con la falacia lógica de un argumento circular . Aunque una referencia circular a menudo no será útil y no revelará información, como dos entradas en un índice de libros que se refieran entre sí, no es necesariamente para que una referencia circular no sea de utilidad. Los diccionarios, por ejemplo, siempre deben ser en última instancia una referencia circular, ya que todas las palabras de un diccionario se definen en términos de otras palabras, pero un diccionario sigue siendo una referencia útil. Las oraciones que contienen referencias circulares aún pueden ser significativas:

Su hermano le dio un gatito; su hermana se lo agradeció.

es circular, pero no sin sentido. De hecho, se puede argumentar que la autorreferencia es una consecuencia necesaria de la Ley de no contradicción de Aristóteles , un axioma filosófico fundamental . Desde este punto de vista, sin autorreferencia, la lógica y las matemáticas se vuelven imposibles, o al menos, carecen de utilidad.

En programación informática

Las referencias circulares pueden aparecer en la programación de computadoras cuando un fragmento de código requiere el resultado de otro, pero ese código necesita el resultado del primero. Por ejemplo, las dos funciones, posn y plus1 en el siguiente programa de Python comprenden una referencia circular:

def posn(k: int) -> int:
    if k < 0:
        return plus1(k)
    return k

def plus1(n: int) -> int:
    return posn(n + 1)

Las referencias circulares como el ejemplo anterior pueden devolver resultados válidos si tienen una condición de terminación. Si no hay una condición de terminación, una referencia circular conduce a una condición conocida como livelock o bucle infinito , lo que significa que teóricamente podría ejecutarse para siempre.

def posn(k: int) -> int:
    return plus1(k)

def plus1(n: int) -> int:
    return posn(n + 1)

En el estándar ISO, las restricciones de integridad circular de SQL se admiten implícitamente dentro de una sola tabla. Entre varias tablas, se permiten restricciones circulares (por ejemplo, claves externas) definiendo las restricciones como diferibles (consulte CREATE TABLE para PostgreSQL y Ejemplos de restricciones DEFERRABLE para Oracle). En ese caso, la restricción se verifica al final de la transacción, no en el momento en que se ejecuta la instrucción DML. Para actualizar una referencia circular, se pueden emitir dos declaraciones en una sola transacción que satisfará ambas referencias una vez que la transacción se haya comprometido.

En hojas de cálculo

Las referencias circulares también ocurren en hojas de cálculo cuando dos celdas requieren el resultado de la otra. Por ejemplo, si el valor de la celda A1 debe obtenerse sumando 5 al valor de la celda B1, y el valor de la celda B1 debe obtenerse sumando 3 al valor de la celda A1, no se pueden calcular valores. (Incluso si las especificaciones son A1: = B1 + 5 y B1: = A1-5, todavía hay una referencia circular. No ayuda que, por ejemplo, A1 = 3 y B1 = -2 satisfagan ambas fórmulas, ya que hay infinitos otros valores posibles de A1 y B1 que pueden satisfacer ambas instancias).

La referencia circular en hojas de trabajo puede ser una técnica muy útil para resolver ecuaciones implícitas como la ecuación de Colebrook y muchas otras, que de otro modo podrían requerir tediosos algoritmos de Newton-Raphson en VBA o el uso de macros.

Se debe hacer una distinción con los procesos que contienen una referencia circular entre aquellos que son incomputables y aquellos que son un cálculo iterativo con un resultado final. Estos últimos pueden fallar en hojas de cálculo que no están equipadas para manejarlos, pero aún así son lógicamente válidos.

Ver también

Referencias