10

「シーケンス生成関数」を利用して独自のソースコードを出力するプログラムを書くことは可能ですか?

私がシーケンス生成関数と呼んでいるものは、特定の間隔 (つまり、印刷可能な 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;
}

個人的にはありえないと思いますが、根本的な問題についてあまり知らないので、ここに私の考えを投稿しました。色々な意見が聞けるのをとても楽しみにしています!

4

3 に答える 3

2

配列を関数としてエンコードする方法を知っている場合(これを行う方法をすでに知っていると言っているようです)、クリーネの再帰定理はそれが実行できることを保証します。

しかし、トーマスを疑うために、ここにCの例があります。+、-、*、/のみを使用するプログラム生成関数、またはそれらを使用する他の関数を呼び出す関数があります。

チューリング完全性と好きなものを印刷する自由があれば、クワインはいつでも可能です。

于 2010-05-18T16:56:04.730 に答える
1

あなたが言及しているのはQUINEです。それに関する Wiki の記事は非常に優れており、役立つリンクがいくつかあります。http://en.wikipedia.org/wiki/Quine_%28computing%29

于 2010-05-17T14:24:07.930 に答える
0

接線で飛び立つには、Tupper の Self-Referential Formulaを見てみてください。

于 2010-05-18T17:04:28.893 に答える