डमी के लिए पुन: योजना?


83

मैं कुछ वास्तव में सरल, आसानी से समझ में आने वाली योजनाओं और कॉर्सेरशिप योजनाओं (कैटामोर्फिज्म, एनामॉर्फिज्म, हायलोमोर्फिम्स इत्यादि) की व्याख्या कर रहा हूं, जिनके लिए बहुत सारे लिंक का पालन करने की आवश्यकता नहीं है, या एक श्रेणी सिद्धांत पाठ्यपुस्तक खोलने की आवश्यकता नहीं है। मुझे यकीन है कि मैंने इन योजनाओं में से कई को अनजाने में पुनर्निर्मित किया है और कोडिंग की प्रक्रिया के दौरान मेरे सिर में "लागू" किया है (मुझे यकीन है कि हम में से कई हैं), लेकिन मुझे कोई संकेत नहीं है (सह) पुनरावृत्ति योजनाएं उपयोग कहा जाता है। (ठीक है, मैंने झूठ बोला था। मैं उनमें से कुछ के बारे में पढ़ रहा हूं, जिससे यह सवाल सामने आया। लेकिन आज से पहले, मुझे कुछ पता नहीं था।)

मुझे लगता है कि प्रोग्रामिंग समुदाय के भीतर इन अवधारणाओं का प्रसार निषिद्ध व्याख्याओं द्वारा बाधित किया गया है और उदाहरणों में एक के पार आने के उदाहरण हैं - उदाहरण के लिए विकिपीडिया, लेकिन कहीं और भी।

यह शायद उनके नाम से भी बाधित है। मुझे लगता है कि कुछ वैकल्पिक, कम गणितीय नाम (केले और कांटेदार तार के बारे में कुछ है?) लेकिन मुझे कोई सुराग नहीं है कि कटौती करने वाले नाम उन पुनरावर्ती योजनाओं के लिए हैं जो मैं उपयोग करता हूं।

मुझे लगता है कि यह द्विआधारी पेड़ों जैसे अमूर्त डेटा प्रकारों के बजाय सरल वास्तविक दुनिया की समस्याओं का प्रतिनिधित्व करने वाले डेटाटाइप्स के साथ उदाहरणों का उपयोग करने में मदद करेगा।


6
जेरेमी गिबन्स के पास कई कागजात हैं जो सबसे अच्छा परिचय हो सकते हैं क्योंकि वे स्पष्ट और बड़े पैमाने पर स्वयं निहित हैं। "स्ट्रीमिंग प्रतिनिधित्व परिवर्तक" (गुना और संयुक्त प्रकट), "प्रोग्राम कॉम्प्रिहेंशन के लिए विखंडन" (प्रतिमान और अधिक), "द अंडर अनफॉल्ड अनफोल्ड" (एनामॉर्फिज्म)। cs.ox.ac.uk/people/publications/date/Jeremy.Gibbons.html
स्टीफन टेटली

जवाबों:


44

अत्यधिक शिथिल बोलना, एक कायापलटवाद का बस थोड़ा सा सामान्यीकरण है fold, और एक कट्टरता का एक छोटा सामान्यीकरण हैunfold। (और एक hylomorphism सिर्फ एक गुना है जिसके बाद एक गुना है।) वे श्रेणी सिद्धांत को स्पष्ट करने के लिए आमतौर पर अधिक कठोर रूप में प्रस्तुत किए जाते हैं। सघन रूप हमें डेटा (एक प्रारंभिक बीजगणित का आवश्यक रूप से परिमित उत्पाद) और कोडाटा (संभवतः अंतिम कोयला के अनंत उत्पाद) में अंतर करने देता है। यह भेद हमें इस बात की गारंटी देता है कि अनंत सूची में एक तह को कभी नहीं बुलाया जाता है। आम तौर पर कैटेरोफिज्म और एनामॉर्फिज्म के मजाकिया तरीके का दूसरा कारण यह है कि एफ-अल्जेब्रा और एफ-कोलजेब्रस (फंक्शनलर्स से उत्पन्न) पर काम करके हम उन्हें एक बार और एक सूची में एक बार लिखने के बजाय एक बार लिख सकते हैं। बाइनरी ट्री, आदि यह बदले में बिल्कुल स्पष्ट करने में मदद करता है कि वे सभी एक ही चीज क्यों हैं।

लेकिन एक शुद्ध अंतर्ज्ञान दृष्टिकोण से, आप काटा और एना को कम करने और उत्पादन के रूप में सोच सकते हैं, और इसके बारे में है।

संपादित करें: थोड़ा और

एक कायाकल्प (गिबन्स) अंदर-बाहर हाइलो की तरह होता है - इसका एक गुना बाद में एक खुलासा होता है। तो आप इसे एक धारा को फाड़ने और संभावित अलग संरचना के साथ एक नया निर्माण करने के लिए उपयोग कर सकते हैं।

एमिट ने साहित्य में विभिन्न योजनाओं के लिए एक अच्छा "फील्ड गाइड" पोस्ट किया: http://comonad.com/reader/2009/recursion-schemes/

हालाँकि, "सहज" स्पष्टीकरण सीधे होने के बावजूद, लिंक किए गए कोड कम हैं, और इनमें से कुछ पर ब्लॉग पोस्ट जटिल / निषिद्ध पक्ष पर एक कसावट हो सकती है।

कहा कि, शायद सिवाय histomorphisms के लिए मुझे नहीं लगता कि बाकी चिड़ियाघर जरूरी कुछ ऐसा है जिसे आप ज्यादातर समय सीधे सोचना चाहते हैं। यदि आप "हाइलो" और मेटा प्राप्त करते हैं, तो आप अकेले उनके संदर्भ में लगभग कुछ भी व्यक्त कर सकते हैं। आमतौर पर अन्य आकारिकी अधिक प्रतिबंधात्मक होते हैं, कम नहीं (लेकिन इसलिए आपको "मुफ्त में" अधिक गुण देते हैं)।


1
ठीक है, धन्यवाद, लेकिन यह सिर्फ उन तीनों हैं - अन्य हैं। मुझे उम्मीद है कि कोई एक उत्तर जोड़ देगा जो कुछ अन्य पुनरावर्तन योजनाओं के बारे में है।
रॉबिन ग्रीन

3
शेष पुनरावृत्ति योजनाओं में से अधिकांश अस्पष्ट हैं, शायद परावर्तन के अलावा, जो कि हम अक्सर आश्रित भाषाओं में देखते हैं, उनके लिए "प्रेरण सिद्धांतों" से काफी मेल खाते हैं। मुझे यह पता नहीं चला है कि सभी श्रेणी के सिद्धांत यहां कैसे काम करते हैं, लेकिन मुझे संदेह है कि यह बहुत बुरी तरह से टूट जाएगा :)
कॉप्पकिन

3
परोपकारिता एक गुना की तरह है लेकिन आप "बाकी इनपुट" पर झांक सकते हैं। एक तह केवल आपको ट्रैवर्सल के दौरान प्राथमिक पहुंच प्रदान करता है।
स्टीफन टेटली 7

23

कुछ संदर्भ, सबसे श्रेणी-सिद्धांत से (लेकिन "क्षेत्र का नक्शा" देने के लिए प्रासंगिक है जो आपको सरल और अधिक आत्म-निहित "लिंक के बहुत सारे क्लिक" से बचने देगा):

  • जहाँ तक "केले और कांटेदार तार" शब्दावली जाती है, यह मीज़ेर, फॉकिंगा एंड पैटरसन (और अन्य लेखकों द्वारा इसकी अगली कड़ी) के मूल पेपर से आता है , और यह संक्षेप में है, जैसे कि कम-से-कम वैकल्पिक विकल्प के रूप में अंकन-भारी: "नाम" (केले आदि) वे निर्माणों की आस्ति संकेतन की चित्रमय उपस्थिति के लिए एक शॉर्टकट हैं जिन्हें वे आबद्ध करते हैं। उदाहरण के लिए, कैटामोर्फिज्म (यानी सिलवटों) का प्रतिनिधित्व किया जाता है (| _ |), और माता-पिता के साथ एक "केला" जैसा दिखता है, इसलिए नाम। यह वह कागज़ है, जिसे अक्सर "अभेद्य" कहा जाता है, इसलिए पहली बात यह नहीं है कि अगर मैं आप होता तो मैं देखता।

  • उन पुनरावर्तन योजनाओं के लिए मूल संदर्भ (या अधिक सटीक रूप से, उन पुनरावर्तन योजनाओं के लिए एक प्रासंगिक दृष्टिकोण के लिए) बर्ड एंड डी मूर के बीजगणित की प्रोग्रामिंग है (पुस्तक प्रिंट-ऑन डिमांड के अलावा अनुपलब्ध है, लेकिन उपलब्ध प्रतियां सेकंड-हैंड हैं। और यह पुस्तकालयों में होना चाहिए)। इसमें बिंदु-मुक्त प्रोग्रामिंग की अधिक विस्तृत और विस्तृत व्याख्या शामिल है, अगर अभी भी "अकादमिक": पुस्तक कुछ श्रेणी-प्रमेय शब्दावली का परिचय देती है, हालांकि स्व-निहित तरीके से। फिर भी, अभ्यास (जो आपको कागज में नहीं मिलेगा) मदद करता है।

  • लेक्स ऑगस्टिन द्वारा छंटनी की आकृति विज्ञान , पुनरावर्तन योजनाओं को समझाने के लिए विभिन्न डेटा संरचनाओं पर छंटाई एल्गोरिदम का उपयोग करता है। यहनिर्माण द्वारा " डमीज़ के लिए पुनरावृत्ति योजना " बहुत है:

    यह प्रस्तुति विभिन्न आकारिकी को एक सरल तरीके से पेश करने का अवसर देती है, अर्थात् पुनरावर्तन के पैटर्न के रूप में, जो कार्यात्मक प्रोग्रामिंग में उपयोगी होते हैं, श्रेणी सिद्धांत के माध्यम से सामान्य दृष्टिकोण के बजाय, जो औसत प्रोग्रामर के लिए अनावश्यक रूप से डराने की प्रवृत्ति है।

  • एक प्रतीक-मुक्त प्रस्तुति बनाने का एक और तरीका है जेरेमी गिबन्स का अध्याय ओरिगामी प्रोग्रामिंग इन द फन ऑफ प्रोग्रामिंग , कुछ पिछले ओवरलैप के साथ। इसकी ग्रंथ सूची विषय के लिए परिचय का एक दौरा देती है।

    संपादित करें: जेरेमी गिबन्स ने मुझे बताया कि उन्होंने इस प्रश्न को पढ़ने के बाद पुस्तक के वेबपेज पर पूरी पुस्तक की ग्रंथ सूची में एक लिंक जोड़ दिया है । आनंद लें !

मुझे डर है कि ये अंतिम दो संदर्भ केवल (cata | ana | hylo | para) आकारवाद का एक ठोस विवरण देते हैं, लेकिन मेरी आशा है कि यह बीजीय औपचारिकता के माध्यम से फाड़ने के लिए पर्याप्त होगा जो आप अधिक अंकन-भारी प्रकाशनों में पा सकते हैं। मुझे उन चार के अलावा (सह) पुनरावर्तन योजनाओं के किसी भी गैर-श्रेणी-सिद्धांत संबंधी स्पष्टीकरण की कोई जानकारी नहीं है।


16

टिम विलियम्स ने पिछली रात लंदन हास्केल यूजर ग्रुप में एक शानदार बात की थी, जिसमें से प्रत्येक का उल्लेख उदाहरण के साथ पुनरावृत्ति योजनाओं के बारे में किया था। स्लाइड देखें:

http://www.timphilipwilliams.com/slides.html

स्लाइड्स के अंत में सभी सामान्य संदिग्धों (लेंस, केले, कांटेदार तार अला कार्टे आदि) के संदर्भ हैं और आप "ओरिगामी प्रोग्रामिंग" भी कर सकते हैं जो एक अच्छा परिचय है जो मैं पहले नहीं आया था।

और जब यह अपलोड किया जाएगा तो वीडियो यहां होगा:

http://www.youtube.com/user/LondonHaskell

संपादित करें प्रश्न के अधिकांश लिंक ऊपर दिए गए huitseeker के उत्तर में हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.