Это квайн или что?

Я написал простой декоратор, который печатает переданную ему функцию (например, "foo"), а затем декорирую ее саму себя. Итак, наконец, он печатает обе написанные функции.

Недавно я прочитал о квинах и немного застрял с его точным определением. Например, согласно этому источнику, 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

person Michael Abyzov    schedule 24.09.2019    source источник


Ответы (1)


Quine — это компьютерная программа, которая не принимает никаких входных данных и создает копию собственного исходного кода в качестве единственного вывода1

Судя по последнему человеку, редактировавшему определение Википедии, строго нет . Это впечатляет, и вы довольно близки, но порядок имеет значение, и вам нужны эти два вызова внизу вашего вывода.

В общем, чтобы проверить, является ли ваша программа квайном:

./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

or

 javac MyQuine.java
 java MyQuine > output
 diff MyQuine.java output

и технически вы можете пропустить шебанг в верхней части файла языка сценариев в вашем вводе и выводе (т.е. #!/usr/bin/tclsh), если вы вызываете файл напрямую через интерпретатор:

tclsh my_quine.tcl > output
diff my_quine.tcl output
person djsumdog    schedule 24.09.2019