2010-05-17 12 views
9

¿es posible escribir un programa que imprima su propio código fuente utilizando una "función generadora de secuencia"?¿es posible escribir un programa que imprime su propio código fuente utilizando una "función generadora de secuencia"

lo que llamo una función de generación de secuencia es simplemente una función que devuelve un valor de un intervalo específico (es decir, ascii-charecters imprimibles (32-126)). el punto ahora es que esta secuencia generada debería ser el propio código fuente del programa. como ve, implementar una función que devuelve una secuencia arbitraria es realmente trivial, pero dado que la secuencia devuelta debe contener contiene la implementación de la función en sí misma, es una tarea muy no trivial.

Así es como un programa de este tipo (y su salida correspondiente) podría parecerse a

#include <stdio.h> 

int fun(int x) { 
    ins1; 
    ins2; 
    ins3; 
    . 
    . 
    . 
    return y; 
} 

int main(void) { 
    int i; 
    for (i=0; i<size of the program; i++) { 
     printf("%c", fun(i)); 
    } 
    return 0; 
} 

Yo personalmente creo que no es posible, pero ya no sé mucho sobre el asunto subyacente i publicado mis pensamientos aquí. ¡Tengo muchas ganas de escuchar algunas opiniones!

+0

Compruebe el código que publiqué a continuación. Esto es lo que quieres? No estoy 100% seguro de cuáles son tus reglas. – sigfpe

Respuesta

1

A lo que te refieres es a QUINE. El artículo de Wiki es bastante bueno, con algunos enlaces útiles. http://en.wikipedia.org/wiki/Quine_%28computing%29

+0

ya etiqueté mi pregunta con 'quine', ves: P. Creo que un quine "común" funciona totalmente diferente. si estoy equivocado, entonces por favor muéstrame uno que funcione exactamente como lo describí. Yo, para mí, no tuve la suerte de encontrar uno todavía ... – guest

+0

No veo por qué no podría. Si su función almacena una matriz de caracteres con la fuente del programa, funcionaría bien. Sería, de hecho, muy similar al primer ejemplo C en la página wiki. – corsiKa

+0

el punto es que la función produce la salida "matemáticamente", ¡sin almacenar nada! entonces cuando llamo a la función con valores ascendentes: diversión (0) = 35 = '#', diversión (1) = 105 = 'i', diversión (2) = 110 = 'n', y así sucesivamente .. – guest

2

Si sabe cómo codificar una matriz como una función (parece que dice que ya sabe cómo hacerlo), entonces Kleene Recursion theorem garantiza que se puede hacer.

Pero para dudar de Thomases, here es un ejemplo de C. Tiene una función de generación de programa que usa solo +, -, *,/o llama a otras funciones que los usan.

Quines son siempre posibles si tiene la integridad y libertad de Turing para imprimir lo que quiera.

Cuestiones relacionadas