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 Pnella lingua S. Se viene fornito un programma valido Qnella lingua Tcome input per P, verrà generato un programma valido Rnella lingua Tche non accetta input e output Q(R), ovvero il programma Qapplicato 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 Re l'output di R. Questo è code-golf, quindi il codice più breve per le Pvittorie.
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
Pdovrebbe 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
Qdovrebbero 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 elementiQdichiarando che, ad esempio, non possono contenere commenti. Tuttavia, devi essere in grado di implementare qualsiasi funzione calcolabile da stringa a stringa come programma di inputQe devi dichiarare esplicitamente come funzionano e quali ulteriori vincoli vengono posti su di essi. - Il programma di output
Rdovrebbe davvero essere un quine (generalizzato), quindi non deve leggere alcun input (input dell'utente, file ecc.) A meno cheQnon 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 -> Stringfunzione 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 Pviene assegnata la funzione identità
f x = x
come input, il programma di output Rè un quine.