Quine (informática)
Este artigo ou secção contém uma lista de referências no fim do texto, mas as suas fontes não são claras porque não são citadas no corpo do artigo, o que compromete a confiabilidade das informações. |
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
editarOs 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
editarUm 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- QuineProgram pelo Portland Pattern Repository Wiki.