One day, several years ago, I came across an
article in an old Byte on "self-reproducing
programs". I was a curious lad, and looked to see what the article
was about. It said, "Listing 1 is a C program which duplicates itself.
When the program is run it produces (on the standard output) a file containing
an exact copy of its own source code". I was hooked immediately--these
guys must be
geniuses! I copied the article at once, and tried
to figure it out, but I didn't know C at the time. Soon after, I
found another article, this one in Creative
Computing. It had listings in BASIC, and I was ecstatic.
I soon realized that anyone could write self-reproducing programs, and
made a few in BASIC, Pascal, and Forth.
Later that year I finally got a PC, and quickly
forgot about the programs I had written on my old TI-994/A. Then,
last year, as I was skimming through the Jargon file, I saw an entry I
had not noticed before:
:quine: /kwi:n/ /n./ [from the name of the logician Willard van Orman Quine, via Douglas Hofstadter] A program that generates a copy of its own source text as its complete output. Devising the shortest possible quine in some given programming language is a common hackish amusement. Here is one classic quine:
((lambda (x) (list x (list (quote quote) x))) (quote (lambda (x) (list x (list (quote quote) x)))))This one works in LISP or Scheme. It's relatively easy to write quines in other languages such as Postscript which readily handle programs as data; much harder (and thus more challenging!) in languages like C which do not. Here is a classic C quine for ASCII machines:
char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);}For excruciatingly exact quinishness, remove the interior line breaks. Some infamous Obfuscated C Contest entries have been quines that reproduced in exotic ways.
"Wow. A 'common hackish amusement'. I've
seen the Beer List, and the Hello World page, there must be a Quine Page.
I'll have to look around, that should be pretty neat to see what must be
hundreds of quines."
I was half right. There were hundreds of quines,
just no quine page. Admittedly, there were a few attempts, but none
had more than ten or so. I had found over fifty by the time I came
across any of these pages.
Here is (hopefully) the definitive page. You
can check out the plain quine section, the self-reproduction
variations section, and bibliography.
If you've visited before, browse the what's new
section. Take a look at the want list of languages
I'm specifically looking for. Finally, you can browse a list of links.
ABC
Ada
Algol
APL
Assembly
Awk
BASIC
BeFunge
BlooP
BrainF***
C
C++
Objective CAML
dBASE
Emacs Lisp
False
Forth
Fortran
Haskell
HP 48 RPL
Icon
Inform
Intercal
Interpol
J
Java
More Java
Javascript
LISP
Logo
Lpc
Lua
Miranda
ML
Modula-2
MUMPS
Oberon
Pascal
Perl
More Perl
Postscript
POV-Ray
Prolog
Python
Rexx
Scheme
SGML
Smalltalk
Snack
SNOBOL 4
Tcl
TeX
TSE
Unix Shell
Vi
Multiple Languages(polyglots)
Iterating Quines
Quine Generating Programs
Kimian Self Reproduction
Object Printing Programs
Other
Cheats (right now these are in the language entries. They'll soon
have their own category)
I should probably point you to my submissions
page. Also, if you wrote one of these programs and are angry that
I 'stole' it see my copyright page.
The Language List
is a historically-oriented list of over 2300 languages which also includes
pointers to sources. You can download
or
search it from here.
You can also use anonymous FTP from rtfm.mit.edu in the `/usenet/comp.lang.misc' directory to obtain either of these lists.
The Jargon File
A collection of Internet slang, folklore, and history. One of the most
fascinating documents I have ever seen. Read it. Buy the book
too.
The Beer
List
List of implementations of a program to print out the entire lyrics
of "99 Bottles Of Beer On The Wall" in different programming languages.
I think of it and the Hello World page as a wish list. Someday this
collection will be that big!
The "Hello, World"
Page
Like the above, but for "Hello, World". Better organized too.
The Retrocomputing Museum
A great resource of old, legendary computing programs compiled by the
editor of the Jargon File. Everything from APL written by Ken Thompson
to Wumpus. I also stole part of his links section ;)
The IOCCC Headquarters
Short for "International Obfuscated C Code Contest" this is a
wonderful rescource of really, really ugly code. Several entries
have been quines or variations thereof.
alt.fan.hofstadter
and GEB FAQ
Lots of neat stuff here. Self-reference galore.
The Search
for Self-Documenting Code
A paper on how to write quines. Well written. I have another
written by Terry Reedy I
need to put up sometime.
The Polyglot
List
Compiled by yours truly, the several multiple language programs I have.
Yahoo!
list of quine pages
Pretty self-explanitory
Gary P. Thompson II <gthompso@nyx.net> Keywords: quine, program, code, hofstadter, godel, escher, bach, self, self-reproducing, self-replicating, self-duplicating, self-copying, self -producing, selfish, self-sustaining, tricks, self-printing, self-evaluating,quine, program, code, hofstadter, godel, escher, bach, self, self-reproducing, self-replicating, self-duplicating, self-copying, self -producing, selfish, self-sustaining, tricks, self-printing, self-evaluating, self-reproduction, self-replication, self-reproduction, self-replication, self-duplication, self-duplication, reproducing, reproduction, replicating, replication, duplicating, duplication, copying, evaluating, evaluation, self-evaluation, self-evaluation, copying