मैंने देखा है कि अधिकांश कार्यात्मक भाषाएँ अपने सबसे मौलिक सूची प्रकारों के रूप में एक-लिंक्ड सूची (एक "विपक्ष" सूची) को नियुक्त करती हैं। उदाहरणों में कॉमन लिस्प, हास्केल और एफ # शामिल हैं। यह मुख्य धारा की भाषाओं के लिए अलग है, जहाँ मूल सूची प्रकार सरणियाँ हैं।
ऐसा क्यों है?
कॉमन लिस्प के लिए (गतिशील रूप से टाइप किया जा रहा है) मुझे यह विचार आता है कि सामान्य रूप से सूची, पेड़ों आदि का आधार भी पर्याप्त है। यह एक छोटा कारण हो सकता है।
वैधानिक रूप से टाइप की गई भाषाओं के लिए, हालाँकि, मुझे एक अच्छा तर्क नहीं मिल रहा है, फिर भी मैं प्रतिवाद पा सकता हूँ:
- कार्यात्मक शैली अपरिवर्तनीयता को प्रोत्साहित करती है, इसलिए लिंक की गई सूची में आसानी से लाभ कम होता है,
- कार्यात्मक शैली अपरिवर्तनीयता को प्रोत्साहित करती है, इसलिए डेटा साझाकरण भी; एक सरणी एक लिंक की गई सूची की तुलना में "आंशिक रूप से" साझा करना आसान है,
- आप नियमित रूप से एक सरणी पर पैटर्न मिलान भी कर सकते हैं, और इससे भी बेहतर (आप आसानी से उदाहरण के लिए दाएं से बाएं गुना कर सकते हैं),
- उसके शीर्ष पर आपको मुफ्त में यादृच्छिक अभिगम मिलता है,
- और (एक व्यावहारिक लाभ) यदि भाषा सांख्यिकीय रूप से टाइप की जाती है, तो आप नियमित मेमोरी लेआउट को नियोजित कर सकते हैं और कैश से गति बढ़ा सकते हैं।
तो क्यों जुड़ी हुई सूचियों को प्राथमिकता दें?
an array is easier to share "partially" than a linked list
है कि आपके मतलब के रूप में स्पष्टीकरण की आवश्यकता है। उनके पुनरावर्ती स्वभाव के कारण, यह सच है क्योंकि मैं इसे समझता हूं - आप आंशिक रूप से लिंक की गई सूची को किसी भी नोड के साथ पास करके आसान साझा कर सकते हैं, जबकि एक सरणी को एक नई प्रतिलिपि बनाने में समय बिताने की आवश्यकता होगी। या डेटा साझा करने के संदर्भ में, दो लिंक की गई सूचियां एक ही प्रत्यय की ओर इशारा कर सकती हैं, जो कि सरणियों के साथ सिर्फ सादा संभव नहीं है।