Die Herausforderung
In dieser Herausforderung geben Sie eine Quellsprache S und eine Zielsprache an T . Ihre Aufgabe ist es, das folgende Programm Pin der Sprache zu schreiben S. Wenn ein gültiges Programm Qin der Sprache Tals Eingabe für angegeben wird P, wird ein gültiges Programm Rin der Sprache ausgegeben, Tdas keine Ein- und Ausgaben vornimmt Q(R), dh das Programm, Qdas auf den Quellcode von angewendet wird R. Außerdem sollten Sie in Ihrer Antwort ein nicht triviales Beispielprogramm Q(je interessanter, desto besser, obwohl Sie dafür keine Punkte erzielen), das resultierende Programm Rund die Ausgabe von präsentieren R. Dies ist Code-Golf, also der kürzeste Code für PGewinne.
Mit anderen Worten, dies ist eine Herausforderung beim Schreiben eines "universellen Quine-Konstruktors", mit dem beliebige Arten von verallgemeinerten Quines erstellt werden können.
Klarstellungen
- Ihre Ausgangs- und Zielsprache sind möglicherweise identisch.
- Das Programm
Psollte eine Zeichenfolge als Eingabe (von STDIN oder gleichwertig) und eine Zeichenfolge (an STDOUT oder gleichwertig) ausgeben, wie jedes AusgabeprogrammR. - Die Eingabeprogramme
Qsollten auch eine Zeichenfolge in eine andere Zeichenfolge umwandeln, ihre Form ist jedoch flexibler: Dies können Zeichenfolge-zu-Zeichenfolge-Funktionen, Codeausschnitte sein, die eine Variable mit einem bestimmten Namen ändern, und Ausschnitte, die den Datenstapel ändern, wenn Ihre Zielsprache Sie können die Form derQ's auch weiter einschränken , indem Sie angeben, dass sie beispielsweise keine Kommentare enthalten dürfen. Sie müssen jedoch in der Lage sein, jede berechenbare Zeichenfolge-zu-Zeichenfolge-Funktion als Eingabeprogramm zu implementierenQ, und Sie müssen explizit angeben, wie sie funktionieren und welche weiteren Einschränkungen Sie ihnen auferlegen. - Das Ausgabeprogramm
Rsollte eigentlich eine (verallgemeinerte) Quine sein, daher darf es keine Eingaben (Benutzereingaben, Dateien usw.) lesen, sofernQdies nicht der Fall ist. - Standardlücken sind nicht zulässig.
Ein Beispiel
Angenommen, ich wähle Python als Ausgangssprache und Haskell als Zielsprache und fordere außerdem, dass das Eingabeprogramm eine einzeilige Definition einer String -> StringFunktion mit dem Namen ist f. Wenn ich das Saitenumkehrprogramm gebe
f x = reverse x
Als Eingabe für mein Python-Programm Pwird der Quellcode eines anderen Haskell-Programms ausgegeben R. Dieses Programm druckt den Quellcode von auf STDOUT R, jedoch in umgekehrter Reihenfolge . If Perhält die Identitätsfunktion
f x = x
als Eingabe ist das Ausgabeprogramm Rein Quine.