この記事は【Kuin Advent Calendar 2016】の8日目の記事です。
【記事中で紹介しているコードについて】
コンパイルが通らない場合など、不具合があれば、@tatt61880まで連絡いただけると助かります。よろしくお願いいたします。
{ Quine in Kuin. @tatt61880 {Last Modified: 2018/12/03 22:29:32.}}
func main()
func quine(str: []char)
var s: []char :: ""
for i(0, ^str - 1)
var c: char :: str[i]
switch(c)
case '\n'
do s :~ "\\n\" ~\n\t|\""
case '\t'
do s :~ "\\t"
case '\\', '"'
do s :~ ['\\', c]
default
do s :~ [c]
end switch
end for
do cui@print("\{str ~ s}\"\n\tdo quine(str)\nend func\n")
end func
const str: []char :: "{ Quine in Kuin. @tatt61880 {Last Modified: 2018/12/03 22:29:32.}}\n" ~
|"func main()\n" ~
|"\tfunc quine(str: []char)\n" ~
|"\t\tvar s: []char :: \"\"\n" ~
|"\t\tfor i(0, ^str - 1)\n" ~
|"\t\t\tvar c: char :: str[i]\n" ~
|"\t\t\tswitch(c)\n" ~
|"\t\t\tcase '\\n'\n" ~
|"\t\t\t\tdo s :~ \"\\\\n\\\" ~\\n\\t|\\\"\"\n" ~
|"\t\t\tcase '\\t'\n" ~
|"\t\t\t\tdo s :~ \"\\\\t\"\n" ~
|"\t\t\tcase '\\\\', '\"'\n" ~
|"\t\t\t\tdo s :~ ['\\\\', c]\n" ~
|"\t\t\tdefault\n" ~
|"\t\t\t\tdo s :~ [c]\n" ~
|"\t\t\tend switch\n" ~
|"\t\tend for\n" ~
|"\t\tdo cui@print(\"\\{str ~ s}\\\"\\n\\tdo quine(str)\\nend func\\n\")\n" ~
|"\tend func\n" ~
|"\tconst str: []char :: \""
do quine(str)
end func
{ Quine in Kuin. @tatt61880 {Last Modified: 2018/12/03 22:29:32.}}
func main()
func quine(str: []char)
var s: []char :: ""
for i(0, ^str - 1)
var c: char :: str[i]
switch(c)
case '\n'
do s :~ "\n\" ~\n\t|\""
case '\t'
do s :~ "\t"
case '\', '"'
do s :~ ['\', c]
default
do s :~ [c]
end switch
end for
do cui@print("\{str ~ s}\"\n\tdo quine(str)\nend func\n")
end func
const str: []char :: "{ Quine in Kuin. @tatt61880 {Last Modified: 2018/12/03 22:29:32.}}\n" ~
|"func main()\n" ~
|"\tfunc quine(str: []char)\n" ~
|"\t\tvar s: []char :: \"\"\n" ~
|"\t\tfor i(0, ^str - 1)\n" ~
|"\t\t\tvar c: char :: str[i]\n" ~
|"\t\t\tswitch(c)\n" ~
|"\t\t\tcase '\n'\n" ~
|"\t\t\t\tdo s :~ \"\\n\\" ~\n\t|\\"\"\n" ~
|"\t\t\tcase '\t'\n" ~
|"\t\t\t\tdo s :~ \"\\t\"\n" ~
|"\t\t\tcase '\\', '\"'\n" ~
|"\t\t\t\tdo s :~ ['\\', c]\n" ~
|"\t\t\tdefault\n" ~
|"\t\t\t\tdo s :~ [c]\n" ~
|"\t\t\tend switch\n" ~
|"\t\tend for\n" ~
|"\t\tdo cui@print(\"\{str ~ s}\\"\n\tdo quine(str)\nend func\n\")\n" ~
|"\tend func\n" ~
|"\tconst str: []char :: \""
do quine(str)
end func