挑战
在此挑战中,您将指定源语言 S
和目标语言 T
。您的任务是P
用该语言编写以下程序S
。如果输入了有效Q
语言的程序T
作为输入P
,它将以有效R
语言T
输出没有输入和输出的有效程序Q(R)
,即Q
应用于的源代码的程序R
。此外,您应该在答案中提供一个简单的示例程序Q
(越有趣,越好,尽管您对此没有得分),结果程序R
以及的输出R
。这是代码高尔夫球,因此是P
获胜的最短代码。
换句话说,这对于编写一个可以创建任意类型的广义quines的“通用quine构造函数”是一个挑战。
澄清说明
- 您的源语言和目标语言可能相同。
- 程序
P
应采用一个字符串作为输入(来自STDIN或等效的字符串),并输出一个字符串(至STDOUT或等效字符串),每个输出程序也应如此R
。 - 输入程序
Q
还应该将一个字符串转换为另一个字符串,但是它们的形式更加灵活:它们可以是字符串到字符串的函数,可以使用特定名称修改变量的代码段,可以使用目标语言来修改数据堆栈的代码段有一个,等等。您还可以Q
通过声明例如可能不包含任何注释来进一步限制的形式。但是,您必须能够将任何可计算的字符串到字符串函数实现为输入程序Q
,并且必须明确说明它们的功能以及对它们施加的进一步约束。 - 输出程序
R
实际上应该是一个(通用的)quine,所以除非Q
这样做,否则它不得读取任何输入(用户输入,文件等)。 - 不允许出现标准漏洞。
一个例子
假设我选择Python作为源语言,选择Haskell作为目标语言,并且进一步要求输入程序应该是String -> String
名为的函数的单行定义f
。如果我提供反向字符串程序
f x = reverse x
作为我的Python程序的输入P
,它将输出另一个Haskell程序的源代码R
。该程序将的源代码打印到STDOUT R
,但相反。如果P
赋予身份功能
f x = x
作为输入,输出程序R
是一个quine。