インターネットをいじった後、Rでクワインを書いた人を見つけることができませんでした(編集:これを書いて以来、SOでいくつか見つけましたが、まだこれに興味があります)。だから、自分で考えてみようと思いました。私の結果は(驚くほど短い)コードでした:
function(){}
実行時に出力さfunction(){}
れます。これは、関数名の後に括弧や引数がない場合、関数のソース コードが返されるという事実を利用しています。
ただし、「自分自身を見る」プログラムは、一般に真のクワインとは見なされません。私が「本物の」クワインを書いたかどうかを判断しようとする過程で、私が理解できないことに気付いたことが 2 つあります。ファイル i/o と (2) function(){}
(または のような同様のコマンドlogical(0)
) が自分自身を印刷するときの自己参照の程度。前者は SO には主観的すぎるようですが、後者については説明を期待していました。そう...
を実行するfunction(){}
と、独自の「ソースコード」を出力する原因は正確には何ですか? たとえば、R は空の関数をローカル環境にロードし、その関数を評価してから、それを定義したコードを調べて出力しますか? それとも、すぐにfunction(){}
その定義を見てエコーするだけですか? これとの間に根本的な違いはありますか
f<-function(){cat("f<-");print(f);cat("f()")}
f()
実行時に両方がどのように印刷されるかという点で?