इन्फ़िक्स नोटेशन का उपयोग करके किसी सूची को पूर्णांक के साथ संयोजित करने का प्रयास करते समय जॉइन एक त्रुटि संदेश क्यों नहीं देता है?
मान लीजिए मेरे पास my10List है, जो 1 से 10 तक के दस पूर्णांकों की एक सूची है। मान लीजिए कि मैं सूची को पुनर्व्यवस्थित करना चाहता हूं ताकि तत्व 8 अंत में दिखाई दे; दूसरे शब्दों में, मैं सूची {1, 2, 3, 4, 5, 6, 7, 9, 10, 8} प्राप्त करना चाहता हूँ।
बेशक, इसे पूरा करने के कई तरीके हैं। एक तरीका यह है कि पार्ट ([[]]) और स्पैन (;;) का उपयोग करके प्राप्त तीन उपसूचियों को जोड़ने के लिए जॉइन का उपयोग करें। कोई भी मानक फ़ंक्शन नोटेशन के साथ या इन्फ़िक्स नोटेशन के साथ जॉइन का उपयोग करके ऐसा कर सकता है:
ध्यान दें कि ब्रेसिज़ ({}) my10List[[8]] के आसपास - यानी, {my10List[[8]]} -- आवश्यक हैं क्योंकि दस्तावेज़ को उद्धृत करने के लिए "समान सिर साझा करने वाली सूचियों या अन्य अभिव्यक्तियों को जोड़ता है" से जुड़ें। जाहिर है, my10List[[8]] में हेड लिस्ट नहीं है (यानी, हेड[my10List[[8]]] को निष्पादित करने से पूर्णांक मिलता है), लेकिन {my10List[[8]]} में है (यानी, हेड[{my10List[[ को निष्पादित करने से पूर्णांक मिलता है) 8]]}] सूची देता है)।
हालाँकि, एक बार मैं गलती से ब्रेसिज़ लगाना भूल गया था मेरी10 सूची[[8]]। इस मामले में विधि 1 का परिणाम आश्चर्यजनक नहीं है - जॉइन एक त्रुटि उत्पन्न करता है और फिर कॉल को अमूल्यांकित रूप में प्रिंट करता है:
दूसरी ओर, विधि 2 का परिणाम मेरे लिए आश्चर्यजनक है:
आश्चर्यजनक रूप से, कोई त्रुटि नहीं हुई और सूची केवल तत्व 8 के बिना वापस आ गई। ऐसा क्यों है?
मैंने इसे संस्करण 14 पर भी आज़माया, और परिणाम यह है वही:
अपने इन्फ़िक्स नोटेशन संस्करण का पूर्ण रूप देखें:
तो आपके पास अनिवार्य रूप से Join[_List, 3] है, जो Join के दूसरे उपयोग में फिट बैठता है:
गैर-इन्फिक्स संस्करण में आपके पास Join[_List, _List, n_Integer] है, और यदि इनपुट सूचियों में n स्तर नहीं हैं तो आपको एक संदेश मिलता है। लेकिन केवल एक सूची में शामिल होने पर, जैसे Join[_List, n_Integer] में यह शॉर्ट सर्किट हो जाता है और यह भी जांच नहीं करता है कि सूची में n स्तर हैं या नहीं।