インターネット上を撫でた後、私はRでquineを書いた人を見つけることができませんでした(編集:これを書いて以来、SOのいくつかを見つけましたが、まだこれに興味があります)。だから私は自分で自分の手を試してみようと思った。function(){}は本当ですか?
出力function(){}
が実行されます
function(){}
:私の結果は(意外に短い)コードでした。これは、関数のソースコードを返した後に、括弧や引数がない関数名が使用されるという事実を利用しています。
しかし、「自分自身を見る」というプログラムは、一般的に本当のクインとはみなされません。私が "本当の"キンを書いたかどうかを判断しようとする過程で理解していないことが分かったのは、(1)キンという立場から見て、ファイルI/Oと、(2)function(){}
(またはlogical(0)
のような同様のコマンド)が、自分自身を印刷するときに自己参照する程度。前者はあまりにも主観的すぎるようですが、私は後者を明確にすることを望んでいました。だから...
私はfunction(){}
を実行すると、正確に何が起きて、それが自分自身の "ソースコード"を印刷するのでしょうか?たとえば、空の関数をローカル環境にロードし、その関数を評価した後、それを定義したコードを調べて印刷しますか?または、それはちょうどfunction(){}
を見て、すぐにその定義をエコーしていますか?これと基本的な違いはありますか?
f<-function(){cat("f<-");print(f);cat("f()")}
f()
実行時に両者がどのように印刷されるかという点では違いはありますか?
にもWikipedia私はので、それは浮気すると思いますREPLは暗黙のうちに 'print()'を呼び出しています。ソースコード自体が印刷されていません。 – MrFlick
「quine」という言葉は一度も聞こえませんでしたが、Rの関数は楽しいですね、 'f < - function()this < - function()print(attr(this、 'srcref')))()' 'f()' – jenesaisquoi
任意の無名関数の定義は、あなたのロジックに従います。実際には、定義している関数は実行されず、ただ印刷されます。@ MurFlickによると。 – nicola