मान लें कि मैं विभिन्न खोलने और समापन ब्रैकेट के साथ एक स्ट्रिंग को पार्स करना चाहता हूं (मैंने शीर्षक में ब्रांड्स का उपयोग किया क्योंकि मुझे लगता है कि यह अधिक आम है - सवाल फिर भी वही है) कि मुझे एक सूची में अलग सभी उच्च स्तर मिलते हैं।स्कैला में मिलान करने वाले अभिभावक --- कार्यात्मक दृष्टिकोण
को देखते हुए:
[hello:=[notting],[hill]][3.4(4.56676|5.67787)][the[hill[is[high]]not]]
मैं चाहता हूँ:
List("[hello:=[notting],[hill]]", "[3.4(4.56676|5.67787)]", "[the[hill[is[high]]not]]")
तरह से मैं यह कर रहा हूं उद्घाटन गिनती और कोष्ठक बंद करने और सूची में जोड़ने से जब भी मैं 0 करने के लिए अपने काउंटर प्राप्त कर रहा है। हालांकि, मेरे पास एक बदसूरत अनिवार्य कोड है। आप मान सकते हैं कि मूल स्ट्रिंग अच्छी तरह से बनाई गई है।
मेरा प्रश्न है: इस समस्या के लिए एक अच्छा कार्यात्मक दृष्टिकोण क्या होगा?
नोट्स: मैंने इसका उपयोग करने के बारे में सोचा है ... उपज निर्माण लेकिन काउंटरों के उपयोग को देखते हुए मुझे एक साधारण सशर्त नहीं मिल सकता है (मुझे केवल काउंटर अपडेट करने के लिए सशर्त होना चाहिए) और मुझे नहीं पता कि कैसे मैं इस मामले में इस निर्माण का उपयोग कर सकता था।
देखें "पार्सर combinators": http://stackoverflow.com/search?q = स्कैला + पार्सर + संयोजक –
इसी तरह का मामला: http://blog.tmorris.net/haskell-scala-java-7- कार्यात्मक-java-java/। टिप्पणियों में कोड सबसे उपयोगी बिट है। –
@AlexanderAzarov, हर बार जब मैं पार्सर संयोजकों के साथ खेलता हूं, मुझे लगता है कि मुझे लगभग निश्चित समय में समाधान प्राप्त करने के लिए कुशल होने के लिए इसके साथ अधिक अनुभव की आवश्यकता होगी। क्या यह यहाँ अधिक है? – huynhjl