La sfida
In questa sfida, si specifica una lingua di origine S
e una lingua di destinazione T
. Il tuo compito è scrivere il seguente programma P
nella lingua S
. Se viene fornito un programma valido Q
nella lingua T
come input per P
, verrà generato un programma valido R
nella lingua T
che non accetta input e output Q(R)
, ovvero il programma Q
applicato al codice sorgente di R
. Inoltre , dovresti presentare nella tua risposta un programma di esempio non banale Q
(più interessante, meglio è, anche se non ottieni punti per questo), il programma risultante R
e l'output di R
. Questo è code-golf, quindi il codice più breve per le P
vittorie.
In altre parole, questa è una sfida nello scrivere un "costruttore universale di quine" in grado di creare tipi arbitrari di quine generalizzate.
chiarimenti
- Le lingue di origine e di destinazione potrebbero essere identiche.
- Il programma
P
dovrebbe prendere una stringa come input (da STDIN o equivalente) e produrre una stringa (a STDOUT o equivalente), come ogni programma di outputR
. - I programmi di input
Q
dovrebbero anche trasformare una stringa in un'altra stringa, ma la loro forma è più flessibile: possono essere funzioni da stringa a stringa, frammenti di codice che modificano una variabile con un determinato nome, frammenti che modificano lo stack di dati se la lingua di destinazione ne ha uno, ecc. È inoltre possibile limitare ulteriormente la forma degli elementiQ
dichiarando che, ad esempio, non possono contenere commenti. Tuttavia, devi essere in grado di implementare qualsiasi funzione calcolabile da stringa a stringa come programma di inputQ
e devi dichiarare esplicitamente come funzionano e quali ulteriori vincoli vengono posti su di essi. - Il programma di output
R
dovrebbe davvero essere un quine (generalizzato), quindi non deve leggere alcun input (input dell'utente, file ecc.) A meno cheQ
non lo faccia. - Le scappatoie standard non sono ammesse.
Un esempio
Supponiamo che io scelga Python come lingua di origine e Haskell come lingua di destinazione e che richieda inoltre che il programma di input sia una definizione di una riga di una String -> String
funzione denominata f
. Se do il programma di inversione di stringa
f x = reverse x
come input per il mio programma Python P
, genererà il codice sorgente di un altro programma Haskell R
. Questo programma stampa su STDOUT il codice sorgente di R
, ma invertito. Se P
viene assegnata la funzione identità
f x = x
come input, il programma di output R
è un quine.