function(){}是真正的quine吗?

Emp*_*cer 11 r quine

在互联网上闲逛后,我找不到任何在R中编写过quine的人(编辑:自写这篇文章以来,已经在SO上找到了几个,但我仍然对这个问题感兴趣).所以我想我会试着亲自拿出一个.我的结果是(令人惊讶的短)代码:

function(){}
Run Code Online (Sandbox Code Playgroud)

function(){}运行时会输出.这利用了这样一个事实:在没有parens或参数之后的函数名称将返回函数的源代码.

然而,一个"看自己"的程序通常不被认为是真正的quine.在试图决定我是否写了一个"真正的"因素的过程中,我意识到有两件事我不明白:(1)什么构成了一个"看着自己"的程序(从一个角度来看)超出使用范围文件i/o和(2)function(){}(或类似命令logical(0))在打印时自我引用的程度.前者似乎对SO来说过于主观,但我希望对后者进行一些澄清.所以...

当我跑步时function(){},究竟发生了什么导致它打印出自己的"源代码"?例如,R是否将空函数加载到本地环境中,评估该函数,然后回顾定义它以进行打印的代码?或者,它只是看着function(){}并立即回应其定义?这和它之间有根本的区别吗?

f<-function(){cat("f<-");print(f);cat("f()")}
f()
Run Code Online (Sandbox Code Playgroud)

在运行时如何打印自己?

Nik*_*jan 0

这不是真正的 quine,因为它不会向标准输出打印任何内容。蒯因的全部要点在于它可以通过印刷来复制自身。程序必须在 stdout 中创建一个包含其确切代码的新文件或输出。

javascript quine 的示例如下:

(function a(){console.log(`(${a}())`)}())
Run Code Online (Sandbox Code Playgroud)