Quine ( quine , inglés quine ) es un programa de computadora que genera una copia exacta de su texto fuente . Al mismo tiempo, los programas que usan datos externos (leer el texto del programa desde un archivo, ingresarlo desde el teclado, etc.) no se consideran quines. Además, un "programa" que no contiene ningún código (el caso degenerado) no se considera un quine.
En el libro " Etudes for Programmers " de Charles Weatherell , se formula una condición más estricta: el programa no debe utilizar trucos que permitan acceder a su código fuente almacenado en la memoria del cargador o intérprete. Por lo tanto, Quines 10 LISTen BASIC y en el cuartoSOURCE TYPE idioma no son del todo honestos.
El término lleva el nombre del lógico y filósofo estadounidense Willard Van Orman Quine ( 1908-2000 ) , quien se dedicó a un estudio en profundidad de la autorreferencia indirecta .
Quines son posibles en cualquier lenguaje de programación completo de Turing , como consecuencia del teorema de recursión de Kleene . La idea de Quine fue descrita por primera vez por Paul Bratley ( Eng. Bratley, Paul ) y Jean Millo ( Eng. Millo, Jean ) en «Computer Recreations; Autómatas autorreproductores, software: práctica y experiencia, número 2 (1972), pág. 397-400. Bratley se interesó en los programas de reproducción automática después de ver el primer programa de este tipo escrito en el lenguaje de programación Atlas Autocode en Edimburgo en la década de 1960 por el profesor e investigador Hamish Dewar .
Aquí está el código fuente de este programa:
%EMPEZAR !ESTE ES UN PROGRAMA DE AUTOREPRODUCCIÓN %RUTINESPEC R R IMPRIMIR SÍMBOLO(39) R IMPRIMIR SÍMBOLO(39) NUEVA LÍNEA %TÍTULO %FIN~ %TÍTULO %FIN DEL PROGRAMA~ %RUTINADOR %IMPRIMIR TEXTO ' %EMPEZAR !ESTE ES UN PROGRAMA DE AUTOREPRODUCCIÓN %RUTINESPEC R R IMPRIMIR SÍMBOLO(39) R IMPRIMIR SÍMBOLO(39) NUEVA LÍNEA %TÍTULO %FIN~ %TÍTULO %FIN DEL PROGRAMA~ %RUTINADOR %IMPRIMIR TEXTO ' %FINAL %FIN DEL PROGRAMAUn Quine de n-ésimo orden es un programa que muestra código tal que al ejecutarlo se muestra código . En este caso, el código muestra el código del programa original en la pantalla.
Una cadena quine para una lista de lenguajes de programación es un código en el lenguaje que, cuando todos los códigos se ejecutan a la vez, el código en el lenguaje genera un código arbitrario en el lenguaje . Al mismo tiempo, el código en el idioma generado como resultado de los pasos muestra el código original en el idioma .
El programador japonés Yusuke Endo en 2013 creó una cadena quine para iniciarse en el lenguaje de programación Ruby (sin embargo, según la definición, debido a la naturaleza cíclica del algoritmo, si existen códigos en todos los lenguajes, se puede iniciar la ejecución del ciclo de cualquiera de ellos). Los lenguajes de programación en Quine están ordenados alfabéticamente. Para 2018, elevó el número de idiomas en este Quine a 128 [1] .
Yusuke Endo también creó una pseudoquina en Ruby que muestra su texto usando pseudoanimación (dibujando nuevas combinaciones de caracteres en la consola en un intervalo dado).
Además, la fórmula autorreferencial de Tupper puede considerarse una especie de variación matemática de Quine , una desigualdad cuya verdad apunta en un área determinada del plano dibuja la misma fórmula.