यह प्रश्न इस प्रकार है कि स्कैला पैटर्न मिलान और सूचियों के साथ पुनरावृत्ति करता है और इसका प्रदर्शन करता है।स्कैला सूची रिकर्सन प्रदर्शन
अगर मैं एक समारोह है कि एक सूची से अधिक recurses है और मैं एक विपक्ष पर मिलान की तरह उदाहरण के कुछ करने के लिए, के साथ यह करना: मैं उपयोग कर रहा हूँ
myFunction [] = []
myFunction (x:xs) = «something» : myFunction xs
:
def myFunction(xs) = xs match {
case Nil => Nil
case x :: xs => «something» myFunction(xs)
}
हास्केल में वही अर्थशास्त्र जो मैं करता हूं, उदाहरण के लिए, हास्केल। मुझे नहीं लगता कि हास्केल कार्यान्वयन के बारे में कोई सवाल होगा क्योंकि यह केवल सूचियों से निपटने का तरीका है। एक लंबी सूची के लिए (मैं कुछ हज़ार नोड्स के साथ एक सूची पर काम कर रहा हूं), हास्केल झपकी नहीं देगा (हालांकि मैं कल्पना करता हूं; मैंने कभी कोशिश नहीं की है)।
लेकिन से मैं क्या स्काला के साथ समझते हैं, मैच बयान विपक्ष के आसपास सूची विभाजित है और, करने के लिए एक समारोह है कि सूची में कुछ नहीं करता है के लिए उदाहरण का विस्तार करने के unapply निकालने विधि कहेंगे:
def myFunction(xs) = xs match {
case Nil => Nil
case x :: xs => x :: myFunction(xs)
}
हास्केल में:
myFunction [] = []
myFunction (x:xs) = x : myFunction xs
यह इसे वापस एक साथ विपक्ष को निकालने तरीका लागू कहेंगे। एक लंबी सूची के लिए मुझे लगता है कि यह बहुत महंगा होगा।
समझाने के लिए, मेरी विशिष्ट मामले में मैं वर्णों की एक सूची से अधिक recurse और विभिन्न चीजों जमा है, जहां इनपुट स्ट्रिंग किलोबाइट की कुछ दसियों अप करने के लिए कुछ भी है करना चाहते हैं।
मैं वास्तव में प्रत्यावर्तन के प्रत्येक चरण के लिए निर्माणकर्ता और एक्सट्रैक्टर्स बुला अगर मैं एक लंबी सूची से अधिक recurse करना चाहते हो जाएगा? या वहाँ अनुकूलन हैं? या इसे करने के बेहतर तरीके? इस मामले में मैं कई संचायक चर की आवश्यकता होगी और स्पष्ट रूप से मैं बस कुछ नहीं कर रहे एक सूची से अधिक recursing जा नहीं होगा ...
(कृपया मेरी हास्केल बहाना, मैं दो साल के लिए एक लाइन नहीं लिखा है।)
(और हाँ, मैं पूंछ प्रत्यावर्तन के लिए जा रहा हूँ।)
धन्यवाद! हां, जो मैं लिख रहा हूं वह पूंछ-रिकर्सिव होगा, दूसरा स्निपेट एक बुरा उदाहरण था! जो मैं वास्तव में करना चाहता हूं वह कुछ गैर-तुच्छ कार्य के आधार पर इनपुट स्ट्रिंग को विभिन्न हिस्सों में विभाजित कर रहा है: नतीजा यह है कि जमाकर्ता कोई नक्शा या गुना शैली आउटपुट नहीं करते हैं। शायद मैं इस सामान्य मामले में सामान्य पैटर्न की तलाश में प्रश्न को सामान्य बनाने की कोशिश कर रहा था। – Joe
ठीक है, मैंने जो आखिरी उदाहरण जोड़ा है उसे देखें। –
बिल्कुल सही, जो दोनों पहलुओं का उत्तर देता है। आपका बहुत बहुत धन्यवाद! – Joe