Code + quines de données
La structure la plus générale d'un quine ressemble à ce pseudocode:
data = " une version échappée de tout le programme,
avec cette chaîne remplacée par un marqueur "
programme = data.replace (
une expression qui évalue le marqueur mais ne le mentionne pas ,
échappé (données))
programme d'impression;
Cette structure peut être utilisée pour écrire un quine (assez naïf) dans la plupart des langues. Cependant, il a tendance à marquer assez mal sur la plupart des systèmes de notation, car vous devez écrire l'intégralité du programme deux fois. Cependant, la plupart des structures quine peuvent être considérées comme des optimisations de celle-ci.
Il y a quelques subtilités à cela. Dans certaines langues, la partie la plus difficile de cette opération consiste à écrire le code d'échappement; dans de nombreuses langues, produire le marqueur sans mentionner son nom est difficile; et dans certaines langues ésotériques, vous devrez inventer votre propre type de chaîne littérale. Les trois opérations n'ont cependant pas tendance à causer trop de problèmes.
Par exemple, nous pouvons écrire un quine Python échappant une chaîne en utilisant repr
et en utilisant la x"
chaîne de séquence de 2 caractères (qui est représentable comme "x\""
, c'est-à-dire n'utilisant pas la séquence x"
dans la représentation de chaîne de la chaîne elle-même) comme marqueur:
d='d=x"\nprint(str.replace(d,"x\\"",repr(d)))'
print(str.replace(d,"x\"",repr(d)))