को कैसे छोड़ सकता हूं मैं कुछ सामान्य एल्गोरिदम लागू करने वाले स्कैला के साथ मिल रहा हूं। एक बुलबुला तरह मैं इस मुद्देमैं इस नील केस
में भाग पुनः बनाने का प्रयास करते समय यहाँ शीर्ष करने के लिए मूल्य बुलबुले कि एक आंतरिक पाश के एक कार्यान्वयन है:
def pass(xs:List[Int]):List[Int] = xs match {
case Nil => Nil
case x::Nil => x::Nil
case l::r::xs if(l>r) => r::pass(l::xs)
case l::r::xs => l::pass(r::xs)
}
मेरे मुद्दा मामले Nil => Nil
के साथ है। मैं समझता हूं कि मुझे इसकी आवश्यकता है क्योंकि मैं इस समारोह में Nil
लागू कर सकता हूं। क्या यह सुनिश्चित करने का कोई तरीका है कि Nil
इस तरह से एक तर्क के रूप में प्रदान नहीं किया जा सकता है जो संकलक को संतुष्ट करेगा ताकि मैं इस मामले को खत्म कर सकूं?
आह, अच्छा, मुझे इस बारे में अनजान था, क्योंकि मुझे स्कैला नहीं पता :-) –
ध्यान दें कि इसका मतलब है कि आप इस फ़ंक्शन को सामान्य रूप से 'सूची [Int] 'मानों पर लागू करने में असमर्थ होंगे, क्योंकि आमतौर पर संकलक यह पता नहीं है कि किसी दिए गए 'सूची [Int] 'खाली हो जाएंगे या रनटाइम पर नहीं होंगे (सामान्य रूप से ऐसा करने से हेलिंग समस्या को हल करने की आवश्यकता होती है)। पैटर्न मिलान वह तंत्र है जिसके द्वारा एक सामान्य अज्ञात 'सूची [Int] 'मान दो अलग-अलग शाखाओं में जा सकता है, चाहे वह' शून्य' या ':: [Int]' है।इसका अर्थ यह है कि यदि आप 'सूची [Int]' के रूप में सूचियों के चारों ओर गुज़र रहे हैं, तो आपको हर बार 'पास' कहने पर उन्हें पैटर्न पैटर्न करना होगा। – Ben
और आप इसे 'पास (1 :: 2 :: नील)' भी कह सकते हैं ... –