計算可能性理論(クリーネの2番目の再帰定理など)の多くの結果により、独自のソースコードで動作できるプログラムを構築できることが保証されます。たとえば、Michael Sipserの「計算理論の紹介」では、2つの文字列を受け入れて文字列を生成する関数を表すプログラムはすべて、同等のプログラムに変換できると述べている再帰定理の特殊なケースを証明しています。 2番目の引数は、プログラム自体のソースコードと同じです。さらに、このプロセスは自動的に実行できます。
独自のソースコードにアクセスできるプログラムを作成するために使用する構造はよく知られており(ほとんどの計算理論にはそれが含まれています)、クワインを生成するためによく使用されます。私の質問は、誰かが、プログラムのソースのプレースホルダーを含む何らかの言語(たとえば、C)のプログラムを入力として受け入れ、プログラムを処理して、アクセス可能な新しいプログラムを生成する汎用ツールを作成したかどうかです。独自のソースコードに。これにより、たとえば、クワインを自動的に生成したり、構文ツリーをイントロスペクトできるプログラムを作成したりできます(おそらく、まだサポートされていない言語でのリフレクションが可能になります)。そうでない場合、私はそのようなツールの独自のバージョンを作成することを計画していましたが、これがすでに行われている場合は、車輪の再発明をしたくありません。
編集:@Henning Makholmの提案に基づいて、私はただ座ってそのようなプログラムを実装することにしました。結果のプログラム(私は「kleene
」と呼んでいます)は、入力としてC ++プログラムを受け入れ、関数を呼び出すことによって独自のソースコードにアクセスできる新しいC++プログラムを生成しますkleene::MySource()
。これは、次のプログラムを使用して、この非常に単純なプログラムをQuineに変換できることを意味しますkleene
。
#include <iostream>
int main() {
std::cout << kleene::MySource() << std::endl;
}
あなたがそれをチェックすることに興味があるなら、それは私のウェブサイトでここに利用可能です。