• physis
    #52
    Szerintem ez nagyon szép megoldás, és nem jutott eszembe még soha így, köszönöm, hogy ilyen értetően leírtad. A rögtön kipróbálható működéstől szerintem már nem választja sok el, valószínűleg csak annyi, hogy a tervrajz-stringben belül is vannak idézőjelek (mármint nem a tervrajz-stringet határoló idézőjelpárra gondolok, hanem épp azokra, amiket a tervrajz-string mint a forráskód részét alkotó idézőjeleket ábrázol), ezeket kétféleképp kell majd használni: a külső részeknél közvetlenül ki lehet íratni őket, a középre beszúrt tervrajz-másodpéldánynál pedig escape-elve kell őket kiíratni. Ezért itt kell egy ,,escape''-elő, ,,idéző'', ,,kódoló'' segédfüggvény is:

    SPOILER! Kattints ide a szöveg elolvasásához!

    function idéz(string s)
    {
    az idézőjel-karaktereket backslash-idézőjel karakterszekvenciákra cseréli:
    foreach char c in s do replace c as '"' ---> "\"";
    }

    function quine(string előtteQutána) {
    print előtte;
    print idéz(előtteQutána);
    print utána;
    }

    string tervrajz = "function idéz(..){..}
    function quine(..){..}
    string tervrajz = "Q";
    quine(tervrajz)";

    quine(tervrajz);


    Még nem tudtam kipróbálni, de szerintem így már működni fog.

    Az escape-elés elméleti szinten szerintem valami olyasmivel kapcsolatos, hogy a tárgynyelvi és a metanyelvi szintet elválasztjuk, és az egyik nyelven belül reprezentáljuk a másikat. Sajnos az általános elméleti keretre már nem emlékszem, de van ilyen, a quine-ok ötlete nagymértékben általánosítható, és épp ezért ez a megoldás a biológia által a valóságban alkalmazott megoldással rokon.