几年前,我正在考虑制作一个打印自己的源代码的程序的方法,我想出了这两种方法:
程序可以使用其他算法来打印自己的源代码吗?
答案 0 :(得分:2)
我认为你的两个案例涵盖了所有选项。情况(1)包括“从外部设备加载程序源”形式的情况,而情况(2)包括“以编程方式生成程序源”形式的情况。您当然可以考虑一种混合方法,例如“从文件中读取程序的前半部分,然后以编程方式生成后半部分”,但这与您上面描述的内容没有任何不同。
答案 1 :(得分:2)
史蒂夫在评论中指出案例1)通常不被认为是一个quine,可能因为它在任何可以执行文件I / O的语言中都是微不足道的
案例2)是大多数人在说quine时的意思,“聪明地使用字符串”是你展示的部分。
在某些语言中有第三种情况(通常也不算是真正的情况,因为它比案例1更简单)。如果一种语言允许一个完全没有语句的程序,那么这个“空”程序通常不会打印任何内容,这当然与它的源代码相同。例如TCL脚本:
将打印:
)
答案 2 :(得分:0)
程序不必是具有特定“名称”的“可执行”,并且源代码不必位于具有特定“名称”的“文件”中。这些都是现代操作系统的工件,完全与手头的工作无关。
答案 3 :(得分:0)
char*f="char*f=%c%s%c;main()
{printf(f,34,f,34,10);}%c";
main(){printf(f,34,f,34,10);}
(在一行中)
有很多这样的代码 http://www.nyx.net/~gthompso/quine.htm
对我来说这是最好的方法:将代码分配给变量并重复使用它。