2014-04-26 10:52:28 -04:00
|
|
|
quine
|
|
|
|
|
2014-04-26 11:54:15 -04:00
|
|
|
/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.
|
|
|
|
|