Abrir menu principal
Text document with red question mark.svg
Este artigo ou secção contém fontes no fim do texto, mas que não são citadas no corpo do artigo, o que compromete a confiabilidade das informações. Ajude a melhorar este artigo inserindo fontes.

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óriaEditar

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 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 QuineEditar

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ênciasEditar