Concurrent Cleanでquine
haskellのquineが下に挙げたものらしいので、
main=putStr(x++show x);x="main=putStr(x++show x);x="
それを真似しようと思って下のように書いたのだけれど、
module m;import StdEnv;Start=x+++x;x="module m;import StdEnv;Start=x+++x;x="
haskellのshowにあたるものが見つからない。
-
-
- -
-
じゃあ、Perlのquineは下らしいのですが、
$q=q(print"\$q=q($q);$q");print"\$q=q($q);$q"
今度は、q()にあたるエスケープ文字を無効にするクオーテーションがCLEANにないので、このやり方も使えなさそう。
-
-
- -
-
ここにquineがたくさん集まっているみたい。
http://www.nyx.org/~gthompso/quine.htm
-
-
- -
-
Javaのこの戦略が使えるかも
class S{public static void main(Stringa){String s="class S{public static void main(Stringa){String s=;char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}";char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}
-
-
- -
-
これならどう?
module m;import StdEnv;Start=x+++c+++x+++c;c=toString(toChar 34);x="module m;import StdEnv;Start=x+++c+++x+++c;c=toString(toChar 34);x="
前後に、クオーテーションがついちゃうな。
-
-
- -
-
完成
module m;import StdEnv;Start w#(s,w)=stdio w;#s=fwrites(x+++c+++x+++c)s;#(_,w)=fclose s w;=w;c=toString(toChar 34);x="module m;import StdEnv;Start w#(s,w)=stdio w;#s=fwrites(x+++c+++x+++c)s;#(_,w)=fclose s w;=w;c=toString(toChar 34);x="
-
-
- -
-
短いquineもいいですけど、長いquineを作るのも、それはそれで難しそう。