quine
/kwi:n/, 名詞
[論理学者Willard van Orman Quineの名にちなみ、Douglas Hofstadterを経由して] 自分自身のソーステキストのコピーを完全な出力として生成するプログラム。ある与えられたプログラミング言語で可能な限り最短のquineを考案することは、ハッカーによくある娯楽である。(単一の空文字列リテラルから成るプログラムが自明に自分自身を再生産する、BASICのいくつかの変種は無視する。)以下は古典的なquineの一つである。
((lambda (x)
(list x (list (quote quote) x)))
(quote
(lambda (x)
(list x (list (quote quote) x)))))
これはLISPまたはSchemeで動く。プログラムをデータとして容易に扱えるPostscriptのような他の言語でquineを書くのは比較的簡単である。Cのようにそれができない言語ではずっと難しい(したがってより挑戦的だ!)。以下はASCIIマシン向けの古典的なC言語のquineである。
char*f="char*f=%c%s%c;main()
{printf(f,34,f,34,10);}%c";
main(){printf(f,34,f,34,10);}
身もだえするほど厳密なquine性のためには、内部の改行を取り除くこと。以下はANSI Cによるもう一つの優雅なquineである。
#define q(k)main(){return!puts(#k"\nq("#k")");}
q(#define q(k)main(){return!puts(#k"\nq("#k")");})
悪名高いObfuscated C Contestの応募作の中には、風変わりな方法で自己再生産するquineがあった。愉快なQuine Home Pageがある。