在互联网上四处寻找之后,我找不到任何用 R 写过 quine 的人(编辑:自从写这篇文章以来,在 SO 上找到了几个,但我仍然对这个感兴趣)。所以我想我会试着自己想出一个。我的结果是(令人惊讶的短)代码:
function(){}
运行时会输出function(){}
。这利用了这样一个事实,即没有括号或参数的函数名将返回函数的源代码。
然而,“看自己”的程序通常不被认为是真正的 quine。在试图决定我是否写了一个“真正的”quine 的过程中,我意识到有两件事我不明白:(1)什么构成了一个程序“看着自己”(从 quine 的角度来看)超出了使用文件 i/o 和 (2) function(){}
(或类似命令,如logical(0)
)在打印自身时的自引用程度。前者似乎对 SO 来说过于主观,但我希望对后者有所澄清。所以...
当我运行function(){}
时,究竟发生了什么导致它打印自己的“源代码”?例如,R 是否将一个空函数加载到本地环境中,评估该函数,然后回顾定义它以打印的代码?或者,它只是立即查看function(){}
并附和它的定义?这和这有根本区别吗
f<-function(){cat("f<-");print(f);cat("f()")}
f()
就他们在运行时如何打印自己而言?