如何编写一个打印自身源码的 Quine
How to Write a Quine
Quine 是一种不依赖内省却能打印自身源码的程序,既困难又迷人。我先用制造机器的寓言来解释其原理:机器根据计划制造物品,若计划中包含空白的“计划槽”,机器制造出副本后,再将计划复制填入该槽,即可生成完美的自身拷贝。随后,我通过 Python 代码演示了这一过程,从简单的 print 语句逐步构建出能输出自身源码的 Quine。文章通过层层递进的逻辑,揭示了 Quine 背后的精妙构造,帮助读者理解为何它无需“看自己”就能完成自我复制。
我鼓励你:此刻暂停一下,在脑海中想象这一切,直到你感到完全理解为止。
- thomascountz
我学到了东西,而且一路读下来,作者的文风真让我爱不释手!
呼,成功了。但这可不容易,对吧?所以记住我的建议:写 Quine 时,尽量别用引号。一旦开始转义它们,你就再也出不去,没法去滑雪橇了。说到这儿,我就不写代码了,直接去滑雪橇。
- firasd
这页面上所有例子的思路似乎都是:先写一个包含部分代码的字符串,然后再写一些代码来处理这个字符串,使得最终输出时,该字符串里既包含变量赋值(即字符串本身的赋值),也包含变量内容,以及后续的程序代码。
确实,维基百科的第一个例子就是这么做的:
a = 'a = {}{}{}; print(a.format(chr(39), a, chr(39)))'; print(a.format(chr(39), a, chr(39)))
我不确定,但我脑子里的解释似乎比这篇文章一直纠结的“能制造机器的机器”之类的类比更说得通。
- erikschoster
我的乐队成员曾经把我们的网站变成了一个 Quine:https://web.archive.org/web/20161129032158/http://nasa.pink/
现在这估计早被机器人给干掉了,但在 2016 年那会儿挺有意思的,我至今还对他把这事做得如此简洁感到惊叹。