几年前,我在考虑如何制作一个打印自己的源代码的程序,我想出了这两种方法:
- 程序根据可执行文件名打印 .c 或 .cpp 文件(app1 打印 app1.cpp)。但是如果 .cpp 文件位于其他地方,这将失败。
- 该程序“聪明”地使用了字符串(我忘记了它的源代码),并打印了自己。
程序是否可以使用其他算法来打印自己的源代码?
几年前,我在考虑如何制作一个打印自己的源代码的程序,我想出了这两种方法:
程序是否可以使用其他算法来打印自己的源代码?
我认为您的两个案例涵盖了所有选项。案例 (1) 涵盖“从外部设备加载程序源”形式的案例,而案例 (2) 涵盖“以编程方式生成程序源”形式的案例。您当然可以考虑一种混合方法,例如“从文件中读取程序的前半部分,然后以编程方式生成后半部分”,但这似乎与您上面描述的没有任何不同。
正如史蒂夫在评论中指出的那样,案例 1)通常不被视为 quine,可能是因为它在任何可以执行文件 I/O 的语言中都非常简单
案例 2) 是大多数人说 quine 时的意思,“巧妙地使用字符串”是您炫耀的部分。
在某些语言中,有第三种情况(通常也不被视为真正的 quine,因为它比情况 1 更微不足道)。如果一种语言允许完全没有语句的程序形成良好的格式,那么这个“空”程序通常不会打印任何内容,这当然与其源代码相同。例如 TCL 脚本:
将打印:
;)
程序不必是具有特定“名称”的“可执行文件”,源代码不必位于具有特定“名称”的“文件”中。这些都是现代操作系统的产物,与手头的工作完全无关。
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中有很多这样的代码
对我来说这是最好的方法:将代码分配给变量并重复使用它。