Quine (informática)
Em informática, um quine é um programa que produz seu código fonte como sua saída única, ou seja, a resultado de um programa quine é o próprio código fonte do programa. Por diversão, alguns hackers tentam desenvolver programas quine o mais curtos possíveis, já que pode ser feito um quine em qualquer linguagem de programação.
[editar] História
Os quines se chamam assim por Willard Van Orman Quine, que fez um estudo extensivo de autoreferência indireta e sugeriu um caso famoso de paradoxo sem autoreferência direta.
A idéia do primeiro "quine" apareceu no livro "Computer Recreations; Self-Reproducing Automata" de Bratley, Paul e Jean Millo, Editora Practice & Experience, Vol. 2 (1972). pág. 397-400. Bratley foi o primeiro a se interresar por programas que se auto-reproduziam após ter sabido primeiramente tal programa escrito em linguagem Atlas Autocode da Universidade de Edimburgo, Escócia na década de 1960 pelo professor e investigador Hamish Dewar.
[editar] Construindo um Quine
Um quine pode ser escrito em diversas linguagens de programação, por exemplo, em linguagem C:
char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c";main() {printf(f,34,f,34,10);}
Em linguagem Python:
d = ['d = ', 'd[0] = d[0] + repr(d)', 'for i in d: print i'] d[0] = d[0] + repr(d) for i in d: print i
Ou mais curto:
a='a=%s; print a%%`a`'; print a%`a`
Em linguagem Perl:
$a='$a=%c%s%c;printf($a,39,$a,39,10);%c';printf($a,39,$a,39,10);
Em linguagem Javascript:
unescape(q="unescape(q=%22*%22).replace('*',q)").replace('*',q)
Em linguagem Tcl:
proc Quine {} { set n [lindex [info level 0] 0] append s [list proc $n [info args $n] [info body $n]] \n [list $n] puts $s } Quine
[editar] Referências
- QuineProgram pelo Portland Pattern Repository Wiki.