ʻO kahi polokalamu Quine a i ʻole Quine kahi papahana e hoʻopuka ana i kāna kumu kumu ponoʻī ke hoʻokō ʻia. ʻAʻole hiki i kahi Quine ke "paʻi i waho iā ia iho", no ka laʻana, ke paʻi ʻana i nā ʻike o ka faila i loaʻa iā ia a i ʻole ka hoʻohana ʻana i nā mana introspective e paʻi i kāna hōʻike ponoʻī. Akā, pono ia e helu i kāna code kumu pono'ī.
ʻO ke ala maʻamau e hana ai i kahi papahana e hana ʻia i ʻelua mau ʻanuʻu:
- E hoʻomaka i kahi hoʻololi kaula me kahi wahi no ka interpolation.
- E paʻi i ke kaula a hoʻopili iā ia iho .
ʻO ka maʻalahi ka loaʻa ʻana o ke kaula pololei. Pehea e hana ai i kēia ʻano like ʻole mai ka ʻōlelo i ka ʻōlelo a pili i ke ʻano o ka haʻi ʻia ʻana o ka mea hoʻololi, ka pono o nā semicolons a me nā laina hou, nā kaha huaʻōlelo e pono ai, etc. He mea hoihoi ka hoʻohana ʻana i nā kaha puanaʻi; Pono kekahi e ʻimi i kahi ala e hōʻike ai e paʻi ʻia kahi kaha ʻōlelo me ka ʻole o ka hoʻohana ʻana i kahi kaha ʻōlelo.
Bash
E like me ka hapa nui o nā mea ma Bash, hoʻohana kēia polokalamu i kahi quirk hoihoi. ʻOiai ʻo nā huaʻōlelo hoʻokahi he mau ʻōlelo ikaika a ʻaʻole e hoʻonui i kekahi mea, unuhi ʻia printf
octal escape characters ma ke ano he mau huaolelo me ke kiko helu helu:
s='s=%s;printf "$s" "$s"';printf "$s" "$s"
Python
Ma Python, hoʻi ka mea kikoʻī format %r
nā huaʻōlelo hoʻokahi wale nō. ʻOi aku ka maʻalahi inā pau ke code me kahi ʻano laina hou:
s='s=%r;print(s%%s)';print(s%s)
Inā makemake ʻoe i ke code me ka ʻole o nā laina laina, pono ʻoe e kākau i kēia:
s='s=%r;print(s%%s,sep="")';print(s%s,sep="")
ʻO JavaScript
Ke holo nei nā quines JavaScript ma lalo o node.js. hoʻohana ʻoe console.log
, e hoʻopili mau i kahi laina hou, no laila pono kahi laina hou ma ka hope o kēlā me kēia palapala:
s="s=%j;console.log(s,s)";console.log(s,s)
He mea hoihoi nō hoʻi ka papahana aʻe: ʻaʻole ia e paʻi i kāna hōʻike holoʻokoʻa, akā hilinaʻi ʻo ia i ka ʻoiaʻiʻo o nā hana i kekahi hōʻike.:
(function a(){console.log('('+a+')()')})()
ʻO ka laʻana aʻe kokoke i ka hoʻopunipuni no ka mea eval
hoʻohana ʻia:
code='var q=unescape("%27");console.log("code="+q+code+q+";eval(code)")';eval(code)
ʻO ka ʻōpala
Hāʻawi ʻo Rust i kahi ala e hoʻopili ai i kahi hoʻopaʻapaʻa i loko o nā huaʻōlelo i loko o kāna macro paʻi ʻia. Eia naʻe, pono kēia macro i ka hoʻopaʻapaʻa mua o ka macro paʻi ʻia he string literal! No laila ʻoi aku ka maikaʻi o ka hoʻohana ʻana i ka ʻike hoʻopaʻapaʻa positional:
fn main(){print!("fn main(){{print!({0:?},{0:?})}}","fn main(){{print!({0:?},{0:?})}}")}
PHP
Hana kēia polokalamu PHP ma ka mālama ʻana i ke code kumu i loko o kahi kaula a laila hoʻohana i kēlā kaula printf
nā mea hoʻopuka. ʻO ka 39
kū no ke ʻano ASCII '
, e mālama pono i nā huaʻōlelo ma ke kaula:
<?php
$code = '<?php
$code = %c%s%c;
printf($code, 39, $code, 39);
';
printf($code, 39, $code, 39);
HQ9+
ʻO ka mea hope loa ʻo HQ9+, i hoʻomohala ʻia e Cliff Biffle:
Q