gpt4 book ai didi

r - function(){} 是真正的奎因吗?

转载 作者:行者123 更新时间:2023-12-04 02:27:31 25 4
gpt4 key购买 nike

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

function(){}

这将输出 function(){}运行时。这利用了这样一个事实,即函数名后面没有括号或参数将返回函数的源代码。

然而,一个“自查”的程序通常不被认为是真正的quine。在试图确定我是否编写了“真正的”quine 的过程中,我意识到有两件事我不明白:(1)除了使用文件 i/o 和 (2) function(){} 的范围(或类似的命令,如 logical(0) )在打印自己时是自引用的。前者似乎对 SO 来说太主观了,但我希望对后者进行一些澄清。所以...

当我跑 function(){} ,究竟发生了什么导致它打印自己的“源代码”?例如,R 是否将一个空函数加载到本地环境中,评估该函数,然后回顾定义它的代码进行打印?或者,只是看着 function(){}并立即呼应其定义?这和这有本质区别吗
f<-function(){cat("f<-");print(f);cat("f()")}
f()

就它们在运行时如何打印自己而言?

最佳答案

你不完全明白这里发生了什么。其实代码

function(){}

除了构造没有参数和主体的函数,返回它并在返回后立即删除它之外,不会做任何事情。它的输出将是 NULL ,所以不会“重新创建自己”。

您在控制台中看到的输出不是 function(){} 给出的输出但来自 print.function .这是负责在控制台中显示函数对象的 S3 方法。你实际做的是:
a <- function(){}
print(a)
rm(a)

一个真正的 R quine 应该是这样的:
m<-"m<-0;cat(sub(0,deparse(m),m))";cat(sub(0,deparse(m),m))

另见 Wikipedia对于这个和其他例子

关于r - function(){} 是真正的奎因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com