Quine (informática)

Origem: Wikipédia, a enciclopédia livre.

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.

História[editar | editar código-fonte]

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 ideia 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 interessar 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.

Construindo um Quine[editar | editar código-fonte]

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=%r;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

Referências[editar | editar código-fonte]