2011-12-21 8 views
9
main(a){printf(a="main(a){printf(a=%c%s%c,34,a,34);}",34,a,34);} 

संकलन के बाद यह स्वयं को पुन: उत्पन्न कैसे कर रहा है? Printf फ़ंक्शन में 34 लिखने की भूमिका क्या है?स्वयं पुनरुत्पादन कार्यक्रम

+3

(टेंगेंट: जब क्विंटेड पैदावार झूठ बोलती है तो "झूठ पैदा होती है) –

+0

ऑफ टॉपिक: आज कुछ दिलचस्प सीखें। धन्यवाद! – ArjunShankar

+0

डाउनवॉटिंग के लिए खेद है, लेकिन मुझे लगता है कि 34 स्पष्ट है, है ना? – prongs

उत्तर

16

34 एक दोहरे-उद्धरण (") के लिए ASCII वर्ण कोड है चरित्र।


(यह होफस्टैड्टर की के लिए एक संदर्भ था मेरी स्पर्शरेखा टिप्पणी पर नजर रखने के लिए" गोडेल Escher बाख "), यह काम करता है क्योंकि यह एक क्विन है, जो मूल रूप से दो तत्वों वाला एक नुस्खा है: डेटा का एक कर्नेल और उस कर्नेल पर एक ऑपरेशन, जैसे कि जब ऑपरेशन पूरा हो जाता है तो मूल नुस्खा पुन: उत्पन्न होता है। ऐसा करने के लिए, कर्नेल और ऑपरेशन लगभग समान होते हैं प्रोग्राम में आप उल्लेख करते हैं, कर्नेल स्ट्रिंग

"main(a){printf(a=%c%s%c,34,a,34);}" 

और संचालन कार्यक्रम के बाकी है:

main(a){printf(a=_____,34,a,34);} 

जहां ____ गिरी है। आप देखेंगे कि वे अनिवार्य रूप से वही दिखते हैं: ऑपरेशन कर्नेल को प्रारूप विनिर्देशक के रूप में उपयोग करके स्वयं मुद्रित कर सकता है (जो कर्नेल को प्रिंट करता है लेकिन बिना छेड़छाड़ करता है, इस प्रकार कर्नेल को आउटपुट में ऑपरेशन में बदल देता है), और कर्नेल को स्वयं भी खिला रहा है प्रारूप विनिर्देशक में एक पैरामीटर (%s) और इसे उद्धृत करते हुए, आउटपुट में कर्नेल उपज।

ऑपरेशन (उद्धृत कर्नेल) => अनगिनत कर्नेल जिसमें कर्नेल की प्रतिलिपि शामिल है, उद्धृत => जो मूल प्रोग्राम है।


एक और बिंदु: कारण इसे इस्तेमाल करता है यह 34 व्यापार है कि यह उद्धरण वर्ण के बिना एक कर्नेल का उपयोग करके हवाले से आपरेशन आसान रहता है, यदि आप कर्नेल के रूप में

"main(a){printf(a=\"%s\",a);}" 

उपयोग करने के लिए,

main(a){printf(a="%s",a);} 

के एक गैर उद्धृत कर्नेल के साथ यह और अधिक कठिन होगा क्योंकि क्रम में गिरी उद्धृत करने के लिए करने की कोशिश की, तो आप बैकस्लैश-भागने करना होगा स्ट्रिंग के बीच में उद्धरण।

+0

ओह !! thanx, लेकिन यह कैसे काम कर रहा है? –

+2

@ आर्य: इस पृष्ठ में 'क्विन्स' का निर्माण कैसे किया जा सकता है इसका एक सभ्य स्पष्टीकरण है: http://www.madore.org/~david/computers/quine.html इससे आपको उपरोक्त कार्यों के बारे में एक विचार मिल सकता है। इस एचटीएमएल पेज के लिए –

+0

thanx ... :) –

संबंधित मुद्दे