The Quine Page



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

char*f="char*f=%c%s%c;main() {printf(f,34,f,34,10);}%c"; main(){printf(f,34,f,34,10);}

"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.

What's New

Plain (single language) Quines

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

Variations



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)





Want List

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.



Links

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