İnternette dolaştıktan sonra, R'de bir sorgu yazmış olan birini bulamadım (Düzenleme: bunu yazdığınızdan bu yana, SO üzerinde birkaç tane buldum, ama hala bununla ilgileniyorum). Bu yüzden elimden gelme konusunda elimi denediğimi düşündüm.İşlev() {} gerçek bir quine mı?
function(){}
çıktısı function(){}
çalışma: My sonuç (şaşırtıcı kısa) kodu oldu. Bu işlev, işlevin kaynak kodunu döndükten sonra, parens veya argüman içermeyen bir işlev isminden yararlanır. Bununla birlikte, "kendisine bakan" bir program genellikle doğru bir sorgu olarak kabul edilmez. “Gerçek” bir sorgu yazıp yazmadığımı kararlaştırmaya çalışırken anlayamadığımı fark ettiğim iki şey var: (1) Bir programın “kendi başına” (bir kuine bakış açısından) kullanımının ötesinde ne oluşturduğu nedir? dosya i/o ve (2) function(){}
'un (veya logical(0)
gibi benzer komutların) kendilerini yazdırdıklarında kendiliğinden referans olma derecesidir. Birincisi SO için çok sübjektif gibi görünüyor, ama ikincisine biraz açıklık getirmeyi umuyordum. Yani ...
function(){}
'u çalıştırdığımda, kendi "kaynak kodunu" yazdırmasına neden olan tam olarak ne oluyor? Örneğin, R boş bir işlevi yerel ortama yüklüyor, bu işlevi değerlendiriyor ve sonra yazdırmak için tanımlanmış olan koda bakıyor mu? Ya da sadece function(){}
'a bakıp tanımını hemen yansıtıyor mu? ikisi de zaman koşmak kendilerini baskı nasıl açısından bu ve
f<-function(){cat("f<-");print(f);cat("f()")}
f()
arasında temel bir fark var mı?
için:
Gerçek R quine böyle bir şey olurdu REPL sizin için 'print()' kelimesini dolaylı olarak çağırıyor; kaynak kodunuz kendini yazdırmıyor. – MrFlick
"Quine" kelimesini hiç duymadım, fakat R fonksiyonları eğlenceli, belki de f gibi bir şey - (function() this <- function() print (attr (this, 'srcref')))() ' sonra 'f()' – jenesaisquoi
Herhangi bir anonim işlev tanımı, mantığınızı izleyen bir sorgudır. Aslında, tanımladığınız işlev yürütülmez, ancak sadece basılı olarak, @MrFlick'in dediği gibi. – nicola