Retrologic Systems Retrologic Systems Retrologic Systems
Online Jargon File
  RetroGuard  |  RetroCapture  |  Contracting  |  Site Map  |  Contact

quine - The Jargon File

0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Jargon On Your Website    Random Entry (Alt-R)RSS Feed - Random Jargon
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. (We ignore some variants of BASIC in which a program consisting of a single empty string literal reproduces itself trivially.) 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. Here is another elegant quine in ANSI C:

#define q(k)main(){return!puts(#k"\nq("#k")");}
q(#define q(k)main(){return!puts(#k"\nq("#k")");})

Some infamous Obfuscated C Contest entries have been quines that reproduced in exotic ways. There is an amusing Quine Home Page.


 
 Copyright © 1998-2006 Retrologic Systems. retroguard | retrocapture | contracting | site map | contact
 All rights reserved. site terms | privacy policy