O desafio
Neste desafio, você especifica um idioma de origem S e um idioma de destino T . Sua tarefa é escrever o seguinte programa Pno idioma S. Se um programa válido Qno idioma Tfor fornecido como entrada P, ele produzirá um programa válido Rno idioma Tque não recebe entradas e saídas Q(R), ou seja, o programa Qaplicado 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 Re a saída de R. Este é o código-golfe, então o código mais curto para Pvitó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
Pdeve 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
Qtambé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 entradaQe deve declarar explicitamente como eles funcionam e quais restrições adicionais você impõe a eles. - O programa de saída
Rdeve realmente ser um quine (generalizado), portanto, não deve ler nenhuma entrada (entrada do usuário, arquivos etc.), a menos que oQfaç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 -> Stringfunçã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 Pfor dada a função de identidade
f x = x
como entrada, o programa de saída Ré um quine.