28 lines
3.4 KiB
HTML
28 lines
3.4 KiB
HTML
|
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>quine</title><link rel="stylesheet" href="../../jargon.css" type="text/css"/><meta name="generator" content="DocBook XSL Stylesheets V1.61.0"/><link rel="home" href="../index.html" title="The Jargon File"/><link rel="up" href="../Q.html" title="Q"/><link rel="previous" href="quick-and-dirty.html" title="quick-and-dirty"/><link rel="next" href="Quirk-objection.html" title="Quirk objection"/></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">quine</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="quick-and-dirty.html">Prev</a><EFBFBD></td><th width="60%" align="center">Q</th><td width="20%" align="right"><EFBFBD><a accesskey="n" href="Quirk-objection.html">Next</a></td></tr></table><hr/></div><dt><a id="quine"/><dt xmlns="" id="quine"><b>quine</b>: <span xmlns="http://www.w3.org/1999/xhtml" class="pronunciation">/kwi:n/</span>, <span xmlns="http://www.w3.org/1999/xhtml" class="grammar">n.</span></dt></dt><dd><p> [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:</p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">
|
|||
|
((lambda (x)
|
|||
|
(list x (list (quote quote) x)))
|
|||
|
(quote
|
|||
|
(lambda (x)
|
|||
|
(list x (list (quote quote) x)))))
|
|||
|
</pre></td></tr></table><p>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:</p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">
|
|||
|
char*f="char*f=%c%s%c;main()
|
|||
|
{printf(f,34,f,34,10);}%c";
|
|||
|
main(){printf(f,34,f,34,10);}
|
|||
|
</pre></td></tr></table><p>For excruciatingly exact quinishness, remove the interior line
|
|||
|
breaks. Here is another elegant quine in ANSI C:</p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">
|
|||
|
#define q(k)main(){return!puts(#k"\nq("#k")");}
|
|||
|
q(#define q(k)main(){return!puts(#k"\nq("#k")");})
|
|||
|
</pre></td></tr></table><p>Some infamous <a href="../O/Obfuscated-C-Contest.html"><i class="glossterm">Obfuscated C Contest</i></a> entries
|
|||
|
have been quines that reproduced in exotic ways. There is an amusing
|
|||
|
<a href="http://www.nyx.org/~gthompso/quine.htm" target="_top"> Quine Home
|
|||
|
Page</a>.</p></dd><div class="navfooter"><hr/><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="quick-and-dirty.html">Prev</a><EFBFBD></td><td width="20%" align="center"><a accesskey="u" href="../Q.html">Up</a></td><td width="40%" align="right"><EFBFBD><a accesskey="n" href="Quirk-objection.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">quick-and-dirty<74></td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"><EFBFBD>Quirk objection</td></tr></table></div></body></html>
|