Можно ли написать программу, которая печатает собственный исходный код, используя «функцию генерации последовательности» - PullRequest
9 голосов
/ 17 мая 2010

возможно ли написать программу, которая печатает свой собственный исходный код, используя "функцию генерации последовательности"?

то, что я называю функцией генерации последовательности, - это просто функция, которая возвращает значение из определенного интервала (то есть для печати ascii-charecters (32-126)). Дело в том, что эта сгенерированная последовательность должна быть собственным исходным кодом программы. как видите, реализация функции, которая возвращает произвольную последовательность, действительно тривиальна, но поскольку возвращаемая последовательность должна содержать реализацию самой функции, это весьма нетривиальная задача.

так может выглядеть такая программа ( и соответствующий вывод)

#include <stdio.h>

int fun(int x) {
    ins1;
    ins2;
    ins3;
    .
    .
    .
    return y;
}

int main(void) {
    int i;
    for ( i=0; i<size of the program; i++ ) {
        printf("%c", fun(i));
    }
    return 0;
}

Лично я думаю, что это невозможно, но, поскольку я не очень много знаю о сути вопроса, я отправил свои мысли здесь. Я действительно с нетерпением жду, чтобы услышать некоторые мнения!

Ответы [ 3 ]

2 голосов
/ 18 мая 2010

Если вы знаете, как кодировать массив как функцию (вы, кажется, говорите, что уже знаете, как это сделать), то теорема Клини о рекурсии *1002* гарантирует, что это возможно.

Но если сомневаться в томасах, здесь это пример C. Он имеет функцию создания программ, которая использует только +, -, * или вызывает другие функции, которые их используют.

Quine всегда возможен, если у вас есть полнота Тьюринга и свобода печатать то, что вам нравится.

1 голос
/ 17 мая 2010

То, что вы имеете в виду, это QUINE. Статья Wiki довольно хорошая, с некоторыми полезными ссылками. http://en.wikipedia.org/wiki/Quine_%28computing%29

0 голосов
/ 18 мая 2010

Чтобы улететь по касательной, попробуйте взглянуть на Формула самоссылки Таппера .

...