クワインとは、ソースコードと同じ文字列を出力するプログラムのことです。
3年前のこの記事のやりかたには欠陥があって、
s="...s=?...s.replace("?", s)..." ...s.replace("?", s)...
だと?が2箇所あるので、その2箇所にsが埋め込まれてしまいます。
なので、置換文字列には、2通りの表現方法があるものを使う必要があります。
前回のようにASCIIコード(itoc)を使っても良いですが、
今回はアルファベットの大文字小文字を使います。
「Z」を置換文字列にします。
.
.
実行結果 C:\me\Egison\quine>type quine.egi (define $main (lambda [$args] (let {[$s "(define $main (lambda [$args] (let {[$s Z]} (print (S.replace (pack {(upper-case c#z)}) (show s) s)))))"]} (print (S.replace (pack {(upper-case c#z)}) (show s) s))))) C:\me\Egison\quine>egison quine.egi (define $main (lambda [$args] (let {[$s "(define $main (lambda [$args] (let {[$s Z]} (print (S.replace (pack {(upper-case c#z)}) (show s) s)))))"]} (print (S.replace (pack {(upper-case c#z)}) (show s) s)))))
.
.
Quine Museum
GitHubにQuine Museumというのがあって(こんなのがあるのですね)、そこにEgisonの、僕と違うやつもある。
.
.