मैं लोगों को के बारे में बात करते हुए देखता हूं आपके बॉयलरप्लेट और जेस्किक प्रोग्रामिंग हास्केल में स्क्रैप करें। इन शब्दों का मतलब क्या है? मैं स्क्रैप आपके बॉयलरप्लेट का उपयोग कब करना चाहता हूं, और मैं इसका उपयोग कैसे करूं?"आपका बॉयलरप्लेट स्क्रैप" क्या है?
उत्तर
अक्सर जटिल डेटा प्रकारों में परिवर्तन करते समय, हमें केवल संरचना के छोटे टुकड़ों को प्रभावित करने की आवश्यकता होती है --- दूसरे शब्दों में, हम अकेले विशिष्ट कमजोर अभिव्यक्तियों, रेडएक्स को लक्षित कर रहे हैं।
क्लासिक उदाहरण पूर्णांक भाव का एक प्रकार से अधिक डबल निषेध उन्मूलन है:
data Exp = Plus Exp Exp | Mult Exp Exp | Negate Exp | Pure Int
doubleNegSimpl :: Exp -> Exp
doubleNegSimpl (Negate (Negate e)) = e
...
यहां तक कि इस उदाहरण का वर्णन करने में, मैं ...
भाग की सम्पूर्णता को लिखने के लिए नहीं करना चाहते। यह पूरी तरह से यांत्रिक है --- Exp
की पूरी तरह से रिकर्सन जारी रखने के लिए इंजन से अधिक कुछ नहीं।
यह "इंजन" बॉयलरप्लेट है जिसे हम स्क्रैप करना चाहते हैं।
इस लक्ष्य को पूरा स्क्रैप आपका बॉयलरप्लेट एक व्यवस्था है जिसके द्वारा हम डेटा प्रकार से अधिक "सामान्य traversals" का निर्माण कर सकते पता चलता है। ये ट्रैवर्सल विशिष्ट डेटा प्रकार के बारे में कुछ भी जानने के बिना बिल्कुल सही तरीके से काम करते हैं। ऐसा करने के लिए, बहुत मोटे तौर पर, हमारे पास सामान्य एनोटेटेड पेड़ की धारणा है।
section :: Generic a => a -> AnnotatedTree
और "वैध" एनोटेट पेड़ एडीटी
कीretract :: Generic a => AnnotatedTree -> Maybe a
कुछ ब्रांड में वापस अनुमान किया जा सकता है: ये इस तरह से ADTS कि सभी ADTS एनोटेट पेड़ के प्रकार में प्रक्षेपित किया जा सकता से बड़े होते हैं
विशेष रूप से, मैं Generic
टाइपक्लास को section
और retract
परिभाषित करने वाले प्रकारों को इंगित करने के लिए शुरू कर रहा हूं।
सभी सामान्य प्रकार के इस सामान्य, एनोटेटेड पेड़ का प्रतिनिधित्व करते हुए, हम एक बार और सभी के लिए एक ट्रैवर्सल परिभाषित कर सकते हैं। विशेष रूप से, हम एक इंटरफ़ेस प्रदान करते हैं (section
और retract
रणनीतिक रूप से उपयोग करते हुए) ताकि अंतिम उपयोगकर्ता AnnotatedTree
प्रकार से कभी संपर्क न करें।
everywhere' :: Generic a => (a -> a) -> (AnnotatedTree -> AnnotatedTree)
ऐसा है कि, और अंतिम और प्रारंभिक section
और retract
रों के साथ संयुक्त अपरिवर्तनीय है कि हमारे एनोटेट पेड़ हमेशा "वैध" हैं, हम
everywhere :: Generic a => (a -> a) -> (a -> a)
everywhere f a0 = fromJust . retract . everywhere' f . section
है: इसके बजाय, यह एक बिट की तरह दिखता है
everywhere f a
क्या करता है? यह ADT a
में फ़ंक्शन f
"हर जगह" लागू करने का प्रयास करता है। दूसरे शब्दों में, हम अब हमारे डबल निषेध सरलीकरण के रूप में
doubleNegSimpl :: Exp -> Exp
doubleNegSimpl (Negate (Negate e)) = e
doubleNegSimpl e = e
दूसरे शब्दों में इस प्रकार है, लिखना जब भी redex (Negate (Negate _))
मिलान करने के लिए विफल रहता है यह id
के रूप में कार्य करता है। अगर हम इस
simplify :: Exp -> Exp
simplify = everywhere doubleNegSimpl
तो डबल negations को everywhere
लागू एक सामान्य ट्रेवर्सल के माध्यम से "हर जगह" का सफाया कर दिया जाएगा।...
बॉयलरप्लेट चला गया है।
को बदलने का प्रयास कर रहा है, 'हर जगह' यह पता लगाता है कि कोई पैटर्न सफलतापूर्वक मेल खाता है या नहीं? आम तौर पर, गैर-संपूर्ण पैटर्न एक अपवाद फेंकते हैं जिसे 'आईओ' में पकड़ा जाना चाहिए। –
यह नहीं करता है। 'doubleNegSimpl' पहचान है जब रेडएक्स मेल नहीं खाता है, इसलिए' हर जगह 'सचमुच बस इसे * हर जगह * लागू करता है और यह ज्यादातर स्थानों में एक नो-ऑप है। बेशक, 'हर जगह' इसे कुशलता से करने के लिए सावधान है। –
ओह, ज़ाहिर है। मैं स्पष्ट रूप से ध्यान से पढ़ नहीं रहा था;) –
- 1. Clojure समकक्ष (SYB) "आपका बॉयलरप्लेट स्क्रैप"
- 2. अस्तित्व और स्क्रैप अपने बॉयलरप्लेट
- 3. हास्केल के स्क्रैप आपका बॉयलरप्लेट (SYB) - केवल एक बार के बजाय हर जगह
- 4. स्केल में समकक्ष आपके बॉयलरप्लेट को स्क्रैप करें?
- 5. स्क्रैप
- 6. स्क्रैप
- 7. स्क्रैप
- 8. स्क्रैप
- 9. कोणीय बॉयलरप्लेट
- 10. स्क्रैप अपने बॉयलरप्लेट का उपयोग करके पेड़ को कैसे परिवर्तित करें?
- 11. टेम्पलेट टाइपपीफ - आपका काम क्या है?
- 12. नेट बनाम जावा। आपका क्या लेना है
- 13. टास्कजग्लर के साथ आपका अनुभव क्या है?
- 14. डेवट्रैक का आपका अनुभव क्या है?
- 15. भाषा सीखने का आपका तरीका क्या है?
- 16. स्क्रैप - पहले से स्क्रैप किए गए यूआरएल
- 17. स्क्रैप के साथ स्क्रैप छवि डेटा
- 18. स्क्रैप द्वारा Google Analytics को स्क्रैप करना
- 19. स्क्रैप क्रॉलस्पीडर:
- 20. बॉयलरप्लेट कोड, हॉट कोड और हॉट स्पॉट क्या है?
- 21. स्क्रैप, जावास्क्रिप्ट
- 22. मौजूदा "बॉयलरप्लेट" रेपो
- 23. एचटीएमएल 5 बॉयलरप्लेट या एचटीएमएल 5 बॉयलरप्लेट मोबाइल?
- 24. बॉयलरप्लेट जावास्क्रिप्ट स्क्रिप्ट/प्लगइन्स?
- 25. न्यूनतम अतिरिक्त बॉयलरप्लेट
- 26. बैकबोन बॉयलरप्लेट टेम्पलेट
- 27. एमवीवीएम बॉयलरप्लेट कोड
- 28. क्या मैं फ़्लैश स्क्रैप कर सकता हूं?
- 29. हास्केल रीडरटी एनवी आईओ बॉयलरप्लेट
- 30. बैकबोन। मैरियनेट बनाम बैकबोन-बॉयलरप्लेट
Google पर इस पर दस्तावेज का एक टन है .... –
@ जस्टिन पिहनी मैंने सवाल पूछा क्योंकि स्टैक ओवरफ़्लो के उद्देश्य में से एक * सभी * प्रोग्रामिंग सवालों का जवाब है, [यहां तक कि जिन्हें भी गुगल किया जा सकता है] (http://meta.stackexchange.com/questions/5280/embrace-the-non-googlers)। यह प्रश्न, जहां तक मैं देख सकता हूं, पहले कभी एसओ पर नहीं पूछा गया है, और मुझे विश्वास है कि यह कुछ उच्च गुणवत्ता वाले उत्तरों उत्पन्न करेगा। –
पेपर की धारा 2 [अपने बॉयलरप्लेट को स्क्रैप करें - जेनेरिक प्रोग्रामिंग के लिए एक प्रैक्टिकल डिज़ाइन पैटर्न] (http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=0088DE3D75D657BE9F2B9E5D705232B3?doi=10.1.1.1.3176&rep=rep1&type= पीडीएफ) में एक अच्छा प्रेरक उदाहरण है। – ErikR