Uhlelo lwe-Quine noma i-Quine wuhlelo olukhipha ikhodi yalo yomthombo lapho lwenziwa. I-Quine akumele "iphumele ngaphandle kwayo" ngokuthi, ngokwesibonelo, iphrinte okuqukethwe kwefayela eliqukethe noma isebenzise amakhono okuzihlola ukuze iphrinte izethulo zayo. Kunalokho, kufanele ibale ikhodi yayo yomthombo.
Indlela yakudala yokwenza uhlelo olunjalo yenzeka ngezinyathelo ezimbili:
- Qalisa iyunithi yezinhlamvu eguquguqukayo ngesibambi sendawo ukuze kuhunyushwe.
- Phrinta iyunithi yezinhlamvu bese uyihlanganisa ngokwayo .
Iqhinga liwukuba uthole intambo kahle nje. Ukwenza kanjani lokhu kuyehluka ngolimi kuye olimini futhi kuncike ekutheni okuguquguqukayo kumenyezelwa kanjani, isidingo samasemikholoni kanye nemigqa emisha, amamaki okucaphuna adingekayo, njll. Ukusetshenziswa kwezimpawu zokucaphuna kuyathakazelisa; Umuntu kufanele athole indlela yokubonisa ukuthi uphawu lokucaphuna kufanele lunyatheliswe ngaphandle kokusebenzisa uphawu lokucaphuna.
Bash
Njengezinto eziningi ku-Bash, lolu hlelo lusebenzisa i-quirk ethokozisayo. Nakuba izingcaphuno ezingashadile ziyizingcaphuno ezinamandla futhi zingandisi lutho, zihunyushwa printf
izinhlamvu zokuphunyuka ze-octal njengezinhlamvu ezinephoyinti lekhodi elishiwo:
s='s=%s;printf "$s" "$s"';printf "$s" "$s"
Inhlwathi
Ku-Python, isicacisi sefomethi siyabuya %r
ngokuzenzakalelayo izingcaphuno single. Kulula kakhulu uma ikhodi igcina ngohlamvu olusha:
s='s=%r;print(s%%s)';print(s%s)
Uma ufuna ikhodi ngaphandle kokunqanyulwa komugqa, kufanele ubhale okulandelayo:
s='s=%r;print(s%%s,sep="")';print(s%s,sep="")
IJavaScript
Ama-Quines alandelayo e-JavaScript asebenza ngaphansi kwe-node.js. usebenzisa console.log
, ehlala ihlanganisa umugqa omusha, ngakho-ke umugqa omusha uyadingeka ekugcineni kwawo wonke umbhalo:
s="s=%j;console.log(s,s)";console.log(s,s)
Uhlelo olulandelayo nalo luyathakazelisa: aluphrinti konke ukumelwa kwalo, kodwa luncike eqinisweni lokuthi imisebenzi inokumelwa okuthile.:
(function a(){console.log('('+a+')()')})()
Isibonelo esilandelayo siseduze nokukopela ngoba eval
esetshenzisiwe:
code='var q=unescape("%27");console.log("code="+q+code+q+";eval(code)")';eval(code)
Ukugqwala
I-Rust inikeza indlela yokufaka ingxabano kumakhrothi ku-macro yayo yokuphrinta efomethiwe. Kodwa-ke, le macro idinga ukuthi ingxabano yokuqala ye-macro yokuphrinta ibe iyunithi yezinhlamvu engokoqobo! Ngakho-ke kungcono kakhulu ukusebenzisa isihlonzi sempikiswano yesikhundla:
fn main(){print!("fn main(){{print!({0:?},{0:?})}}","fn main(){{print!({0:?},{0:?})}}")}
I-PHP
Lolu hlelo lwe-PHP lusebenza ngokugcina ikhodi yomthombo ochungechungeni bese usebenzisa leyo ntambo printf
imiphumela. I 39
imele uhlamvu lwe-ASCII '
, ukuphatha kahle izingcaphuno kuyunithi yezinhlamvu:
<?php
$code = '<?php
$code = %c%s%c;
printf($code, 39, $code, 39);
';
printf($code, 39, $code, 39);
HQ9+
Okokugcina, i-HQ9+, ithuthukiswe nguCliff Biffle:
Q