Die Herausforderung
In dieser Herausforderung geben Sie eine Quellsprache S
und eine Zielsprache an T
. Ihre Aufgabe ist es, das folgende Programm P
in der Sprache zu schreiben S
. Wenn ein gültiges Programm Q
in der Sprache T
als Eingabe für angegeben wird P
, wird ein gültiges Programm R
in der Sprache ausgegeben, T
das keine Ein- und Ausgaben vornimmt Q(R)
, dh das Programm, Q
das 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 R
und die Ausgabe von präsentieren R
. Dies ist Code-Golf, also der kürzeste Code für P
Gewinne.
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
P
sollte eine Zeichenfolge als Eingabe (von STDIN oder gleichwertig) und eine Zeichenfolge (an STDOUT oder gleichwertig) ausgeben, wie jedes AusgabeprogrammR
. - Die Eingabeprogramme
Q
sollten 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
R
sollte eigentlich eine (verallgemeinerte) Quine sein, daher darf es keine Eingaben (Benutzereingaben, Dateien usw.) lesen, sofernQ
dies 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 -> String
Funktion mit dem Namen ist f
. Wenn ich das Saitenumkehrprogramm gebe
f x = reverse x
Als Eingabe für mein Python-Programm P
wird der Quellcode eines anderen Haskell-Programms ausgegeben R
. Dieses Programm druckt den Quellcode von auf STDOUT R
, jedoch in umgekehrter Reihenfolge . If P
erhält die Identitätsfunktion
f x = x
als Eingabe ist das Ausgabeprogramm R
ein Quine.