यहाँ Scala () में 99 समस्याओं के तृतीय समस्या (P03) का मेरा प्रयास है:
आयात स्कला.अनोटेशन। _ // सूची के एनएथ तत्व खोजें। // nth (2, सूची (1, 1, 2, 3, 5, 8)) = 2 ऑब्जेक्ट P03 {@tailrec def nth [A] (n: Int, ls: सूची [ए]): ए = (n , एलएस) मैच {केस (0, एच :: टी :: निल) = & gt; एच केस (एन, _ :: टी) = & gt; Nth (n - 1, t) केस _ = & gt; println (एन);
पहेली यह कोड प्रिंट करती है -4
और एक अवैध अर्गममेंट अपवाद
कोर्स का समाधान पहला पैटर्न बदलने के लिए है:
केस (0, एच :: _) = & gt; एच
यह अब सही उत्तर प्रिंट करता है 2
प्रश्न क्यों है? इस बीच का सूक्ष्म अंतर क्या है:
मामला (0, एच :: टी :: निल) = & gt; एच
और
मामला (0, एच :: _) = & gt; एच
धन्यवाद!
अंतर यह है कि एच :: टी :: नील
दो तत्वों ( h
और t
, शून्य
) के लिए केवल एक सूची से मिलान करता है एक सूची के अंत (मैं 100% यकीन नहीं करता हूँ कि यह सही नामकरण है)) जबकि h :: _
प्रत्येक गैर खाली सूची से मेल खाता है, यानी एक सूची जिसमें कम से कम एक तत्व है, यदि आप जांचते हैं ::
वर्ग आप देखेंगे:
अंतिम मामला वर्ग :: [बी] (निजी var एचडी: बी, निजी [स्कला] var tl: सूची [बी] ]) सूची [बी]
का विस्तार करती है, जिसमें एक सिर और एक पूंछ है जहां पहली सूची का पहला तत्व है और दूसरा बाकी है, h पर मेल खाता है। टी :: नील
का मतलब पूंछ के पहले की तुलना में सूची का पहला तत्व है, और फिर शून्य
होना चाहिए, h :: _
का अर्थ है सिर प्राप्त करना और तब तक आप परवाह नहीं है कि जब तक कोई सिर है, तब तक क्या बचा है।
No comments:
Post a Comment