那是奎因还是什么?
Is that quine or what?
我写了一个简单的装饰器,它打印传递给它的函数(例如 "foo"),然后我对它自己进行装饰。所以最后它打印了两个书面函数。
我最近阅读了有关 quines 的内容,但有点坚持它的精确定义。例如,根据this source阿奎因"must print out precisely those instructions which the programmer wrote as part of the program"。
所以我的问题是:我可以将编写的程序视为quine吗?
def decorate(function):
from inspect import getsourcelines
def wrapper(*args, **kwargs):
for line_num, code_line in enumerate(getsourcelines(function)[0]):
print(code_line)
return wrapper
@decorate
def foo(bar1, bar2=777):
print("bar")
foo(None)
decorate(decorate)(decorate)
精确输出为:
@decorate
def foo(bar1, bar2=777):
print("bar")
def decorate(function):
from inspect import getsourcelines
def wrapper(*args, **kwargs):
for line_num, code_line in enumerate(getsourcelines(function)[0]):
code_line = code_line.replace('\n', '')
print(code_line)
return wrapper
quine 是一种计算机程序,它不接受输入并生成自己的源代码副本作为其唯一输出1
根据最后一位编辑维基百科定义的人的说法,绝对不是。令人印象深刻,你已经很接近了,但顺序很重要,你确实需要在输出底部进行这两个调用。
一般来说,测试你的程序是否是 quine:
./my_quine > output
diff my_quine output # should result in no differences
如果您不使用脚本语言,显然可能需要一些微尘步骤:
cc my_quine.c -o my_quine
./my_quine > output
diff my_quine.c output
或
javac MyQuine.java
java MyQuine > output
diff MyQuine.java output
如果您直接通过解释器调用该文件,技术上您可以在输入和输出中省略脚本语言文件顶部的 shebang(即 #!/usr/bin/tclsh
):
tclsh my_quine.tcl > output
diff my_quine.tcl output
我写了一个简单的装饰器,它打印传递给它的函数(例如 "foo"),然后我对它自己进行装饰。所以最后它打印了两个书面函数。
我最近阅读了有关 quines 的内容,但有点坚持它的精确定义。例如,根据this source阿奎因"must print out precisely those instructions which the programmer wrote as part of the program"。
所以我的问题是:我可以将编写的程序视为quine吗?
def decorate(function):
from inspect import getsourcelines
def wrapper(*args, **kwargs):
for line_num, code_line in enumerate(getsourcelines(function)[0]):
print(code_line)
return wrapper
@decorate
def foo(bar1, bar2=777):
print("bar")
foo(None)
decorate(decorate)(decorate)
精确输出为:
@decorate
def foo(bar1, bar2=777):
print("bar")
def decorate(function):
from inspect import getsourcelines
def wrapper(*args, **kwargs):
for line_num, code_line in enumerate(getsourcelines(function)[0]):
code_line = code_line.replace('\n', '')
print(code_line)
return wrapper
quine 是一种计算机程序,它不接受输入并生成自己的源代码副本作为其唯一输出1
根据最后一位编辑维基百科定义的人的说法,绝对不是。令人印象深刻,你已经很接近了,但顺序很重要,你确实需要在输出底部进行这两个调用。
一般来说,测试你的程序是否是 quine:
./my_quine > output
diff my_quine output # should result in no differences
如果您不使用脚本语言,显然可能需要一些微尘步骤:
cc my_quine.c -o my_quine
./my_quine > output
diff my_quine.c output
或
javac MyQuine.java
java MyQuine > output
diff MyQuine.java output
如果您直接通过解释器调用该文件,技术上您可以在输入和输出中省略脚本语言文件顶部的 shebang(即 #!/usr/bin/tclsh
):
tclsh my_quine.tcl > output
diff my_quine.tcl output