A programmate Quine vel Quine programma est quod suum fontem codicem cum exsecutione emittit. A Quine "extra se exire" non potest, exempli gratia, extrahere contenta tabella continentis vel introspectivas facultates utens imaginem suam imprimendi. Sed suum principium habet calculare codicem.
Via classica ad talem rationem faciendam duobus gradibus fit:
- Filum initialize variabilis cum interpolatione placeholder.
- Filum imprime et in se ipsum interponere .
Dolum chordae aequae dextrae obtinet. Quomodo haec variet a lingua in linguam et pendet quomodo variabilis declaratur, necessitas semicolonum et novitatum, notarum scntentiarum requirentium, etc. Usus quotationum notarum interesting est; Unus modus inveniendi est ad indicandum notam scntentiae imprimi debere sine nota citationis actu.
Bash
Sicut pleraque in Bash, hoc programmate utitur an interesting vaframento. Licet singulae notae validae sint locutiones et non aliquid expandunt, interpretatum est printf
octal effugium ingenia sicut ingenia cum certum codice punctum:
s='s=%s;printf "$s" "$s"';printf "$s" "$s"
Python
In Pythone forma speciei redit %r
automatice singula quotes. Facillimus si cum newline charactere signum finitur:
s='s=%r;print(s%%s)';print(s%s)
Si vis codicem sine linea rumpit, sequentia scribere debebis:
s='s=%r;print(s%%s,sep="")';print(s%s,sep="")
JavaScript
JavaScript quines currunt sub node.js. uteris console.log
, quae semper novam lineam apponit, ideo novus linea in fine cuiusque scriptoris desideratur:
s="s=%j;console.log(s,s)";console.log(s,s)
Propositum hoc etiam interest: non totam suam repraesentationem imprimit, sed in eo nititur quod functiones quamdam repraesentationem habent.:
(function a(){console.log('('+a+')()')})()
Proximum exemplum prope fallis quod eval
usus est:
code='var q=unescape("%27");console.log("code="+q+code+q+";eval(code)")';eval(code)
Rust
Rubigo viam praebet ad argumentum in virgulis concludendum in tortor print formato. Sed haec tortor requirit primum argumentum macronis impressi ut chorda litteralis sit! Optime igitur utatur argumento positionali identifier:
fn main(){print!("fn main(){{print!({0:?},{0:?})}}","fn main(){{print!({0:?},{0:?})}}")}
PHP
Hoc PHP programma operatur in chorda et reponenda fonte codicem illo chorda utens printf
outputs. The 39
stat pro ASCII character '
, ut recte tractamus quotes per filum:
<?php
$code = '<?php
$code = %c%s%c;
printf($code, 39, $code, 39);
';
printf($code, 39, $code, 39);
HQ9+
Novissima sed non minima est HQ9+, a Cliff Biffle evoluta:
Q