O desafio
Neste desafio, você especifica um idioma de origem S
e um idioma de destino T
. Sua tarefa é escrever o seguinte programa P
no idioma S
. Se um programa válido Q
no idioma T
for fornecido como entrada P
, ele produzirá um programa válido R
no idioma T
que não recebe entradas e saídas Q(R)
, ou seja, o programa Q
aplicado ao código fonte de R
. Além disso , você deve apresentar em sua resposta um programa de exemplo não trivial Q
(quanto mais interessante, melhor, embora você não marque pontos), o programa resultante R
e a saída de R
. Este é o código-golfe, então o código mais curto para P
vitórias.
Em outras palavras, esse é um desafio sobre escrever um "construtor universal de quine" que possa criar tipos arbitrários de quines generalizados.
Esclarecimentos
- Seus idiomas de origem e destino podem ser idênticos.
- O programa
P
deve pegar uma string como entrada (de STDIN ou equivalente) e gerar uma string (para STDOUT ou equivalente), como todos os programas de saídaR
. - Os programas de entrada
Q
também devem transformar uma sequência em outra, mas sua forma é mais flexível: eles podem ser funções de sequência a sequência, trechos de código que modificam uma variável com um determinado nome, trechos que modificam a pilha de dados se o idioma de destino você também pode restringir ainda mais a forma dosQ
, afirmando que, por exemplo, eles podem não conter comentários. No entanto, você deve poder implementar qualquer função cadeia a cadeia computável como um programa de entradaQ
e deve declarar explicitamente como eles funcionam e quais restrições adicionais você impõe a eles. - O programa de saída
R
deve realmente ser um quine (generalizado), portanto, não deve ler nenhuma entrada (entrada do usuário, arquivos etc.), a menos que oQ
faça. - As brechas padrão não são permitidas.
Um exemplo
Suponha que eu escolha Python como idioma de origem e Haskell como idioma de destino, além de exigir que o programa de entrada seja uma definição de uma linha de uma String -> String
função denominada f
. Se eu der o programa de reversão de string
f x = reverse x
como entrada para o meu programa Python P
, ele produzirá o código fonte de outro programa Haskell R
. Este programa imprime em STDOUT o código fonte R
, mas invertido. Se P
for dada a função de identidade
f x = x
como entrada, o programa de saída R
é um quine.