チャレンジ
このチャレンジでは、ソース言語 S
とターゲット言語 を指定しますT
。あなたの仕事は、次のプログラムP
を言語で書くことですS
。Q
言語の有効なプログラムがのT
入力として与えられた場合、入力と出力を受け取らない言語のP
有効なプログラム、つまりのソースコードに適用されるプログラムを出力します。さらに、答えには自明ではないサンプルプログラム(より面白く、より良いが、これに対してポイントを獲得しませんが)、結果のプログラム、およびの出力を提示する必要があります。これはコードゴルフですので、勝つための最短のコードです。R
T
Q(R)
Q
R
Q
R
R
P
言い換えれば、これは、任意のタイプの一般化されたクインを作成できる「ユニバーサルクインコンストラクター」の作成に関する課題です。
明確化
- ソース言語とターゲット言語は同一である場合があります。
- プログラム
P
は、すべての出力プログラムと同様に、入力として1つのストリング(STDINまたは同等のものから)を受け取り、1つのストリング(STDOUTまたは同等のものへ)を出力する必要がありますR
。 - 入力プログラム
Q
も文字列を別の文字列に変換する必要がありますが、その形式はより柔軟です:文字列から文字列への関数、特定の名前の変数を変更するコードスニペット、ターゲット言語の場合にデータスタックを変更するスニペットなどがありQ
ます。たとえば、コメントを含めないことを指定することで、の形式をさらに制限することもできます。ただし、任意の計算可能な文字列から文字列への関数を入力プログラムとして実装できる必要があり、それらがどのように機能し、どのような制約を課すかを明示的に指定Q
する必要があります。 - 出力プログラム
R
は、実際には(一般化された)クインである必要があります。Q
したがって、そうしない限り、入力(ユーザー入力、ファイルなど)を読み取ってはなりません。 - 標準の抜け穴は許可されていません。
例
ソース言語としてPythonを選択し、ターゲット言語としてHaskellを選択し、さらに入力プログラムがString -> String
という名前の関数の1行の定義であることを要求するとしますf
。文字列反転プログラムを与えると
f x = reverse x
Pythonプログラムへの入力としてP
、別のHaskellプログラムのソースコードを出力しますR
。このプログラムは、のソースコードをSTDOUTに出力しますR
が、逆になります。P
アイデンティティ関数が与えられた場合
f x = x
入力として、出力プログラムR
はクインです。