2015-09-29 6 views
17

मैं खोजने के लिए किएक सेल सरणी में एक पिछला कॉमा वैध मैटलैब वाक्यविन्यास क्यों है?

A = {1,2,3} 

और

B = {1,2,3,} 

MATLAB में दोनों मान्य सिंटैक्स हैं आज आश्चर्यचकित था। मैं एक त्रुटि उत्पन्न करने के लिए दूसरे कथन की उम्मीद की होगी। जैसा कि मैं कह सकता हूं उतना ही अच्छा है, वे समान सेल सरणी उत्पन्न करते हैं (all([A{:}]==[B{:}]) सत्य लौटाते हैं)।

क्या कोई दूसरा वाक्यविन्यास की अनुमति है? क्या यह पार्सर में एक बग है? A और B वास्तव में वही हैं?

दिलचस्प, निम्नलिखित अनुमति नहीं है:

C = {1,2,3,,,} 
+8

दिलचस्प। '{1,2,4, ;;;; 4,5,6 ;;;}' भी –

+0

अनुमति मैं भाषा के इस मोड़ [इस उत्तर] में एक छोटा सा (की खोज याद http://stackoverflow.com/ ए/28334571/3121310) लेकिन इसके बारे में मैथवर्क्स से कभी स्पष्टीकरण मांगा नहीं। मैं इसे एक विशेष मामले में डाल दूंगा कि पार्सर एक आयाम में '0' आकार के साथ एक मैट्रिक्स के समान हैंडल करता है, लेकिन @ लुइसमेन्डो का उदाहरण विशिष्टताओं के रूप में प्रश्न उठाता है। – TroyHaskin

+1

@LuisMendo जो वास्तव में मुझे बाहर निकालता है वह यह है कि यह एक अच्छा, तंग आयताकार समाप्त होता है। ऐसा लगता है कि वहां कम से कम कुछ खाली पंक्तियां होनी चाहिए या कुछ ... – chessofnerd

उत्तर

23

ये अधिक अनुमान कर रहे हैं बल्कि एक जवाब से।

एक Symbol reference जांच कर सकता है और लगता है कि अल्पविराम ,

रूप

कमान या वक्तव्य सेपरेटर इस्तेमाल किया जा सकता एक ही लाइन पर एक से अधिक MATLAB आदेश या बयान दर्ज करने के लिए , एक अल्पविराम से प्रत्येक आदेश या बयान को अलग:

for k = 1:10, sum(A(k)), end

लाइन

B = {1,2,3,} 

इसलिए 3 के बाद एक बयान की उम्मीद है, वहाँ सिर्फ } जो सेल सरणी, एक वैध बयान के अंत का मतलब है।

सरणी पंक्ति सेपरेटर

जब एक नई सरणी बनाने या मौजूदा सरणियों श्रेणीबद्ध करने के लिए इस वर्गाकार कोष्ठक में इस्तेमाल किया, अर्धविराम:


अर्धविराम ; तीन आधिकारिक उपयोगों है सरणी में एक नई पंक्ति बनाता है:

A = [5, 8; 3, 4]

आउटपुट दमन

जब एक आदेश के अंत में रखा, अर्धविराम प्रदर्शन है कि आदेश से किसी भी उत्पादन के लिए नहीं MATLAB बताता है।इस उदाहरण में, MATLAB प्रदर्शित नहीं करता है, जिसके परिणामस्वरूप 100-दर-100 मैट्रिक्स:

A = ones(100, 100);

कमान या वक्तव्य सेपरेटर

अल्पविराम ऑपरेटर की तरह, आप और अधिक प्रवेश कर सकते हैं पर एक MATIC कमांड से प्रत्येक कमांड को अर्धविराम से अलग करके एक पंक्ति। MATLAB एक अर्धविराम से समाप्त उन आदेशों के लिए आउटपुट दबाता है, और प्रदर्शित करता है जो अल्पविराम से समाप्त आदेशों के लिए आउटपुट प्रदर्शित करता है।

इस उदाहरण में, चर और ए के लिए असाइनमेंट अर्धविराम से समाप्त हो जाते हैं, और इस प्रकार प्रदर्शित नहीं होते हैं। क्योंकि बी को काम है अल्पविराम द्वारा समाप्त किया, यह एक आदेश के उत्पादन में प्रदर्शित होता है:

A = 12.5; B = 42.7, C = 1.25;

लाइन

x = {1,2,3,;5,6,7} 

यह मान्य बयान सरणी पंक्ति इस प्रकार में

तो 3, के बाद विभाजक। इसके बाद एक नया बयान अपेक्षित है, जो इस मामले में डबल है। मान्य।


अब मामला

x = {1,2,3,;;;;4,5,6;;;} 
जैसा कि ऊपर के बाद कि होते हैं, शायदnull statement - NOP कुछ अंतर्निहित कार्यक्रम कोर में लिखा से उधार के बाद 3, बयान सरणी पंक्ति सेपरेटर, और बयान इस प्रकार है

पर विचार सी, जिसका मूल रूप से अर्थ है: कुछ भी नहीं। तो 3,; के बाद अगले वक्तव्य आने से पहले तीन बार "कुछ भी नहीं करें" का पालन करता है। कोई समझ नहीं आता, जैसा कि मैटलैब आपको बता रहा है: अतिरिक्त अर्धविराम अनावश्यक है। - लेकिन मान्य है।

यह भी है कि आप व्यर्थ बातों की अनुमति देता है:

if true 
    ; 
end 

और यह शायद भी कारण है कि

C = {1,2,3,,,} 

एक त्रुटि देता है, क्योंकि अल्पविराम , 'isn टी शून्य स्टेटमेंट, लेकिन पहले कॉमा के बाद एक सेंट है उम्मीद की उम्मीद


लब्बोलुआब यह है: यह अजीब लगता है, लेकिन वास्तव में, मुझे लगता है तर्क के रूप में मैटलैब आंतरिक और अशक्त बयान पर विचार सी-कोड का एक बहुत का उपयोग करता है, सब कुछ उल्लेख मान्य सिंटैक्स है।


अन्य लैंगेज के बारे में क्या?

अर्द्ध कोलन अजगर में x = [1,2,3,;;;;4,5,6;;;] की तरह इस्तेमाल किया, यहां तक ​​कि इरादा मैटलैब क्लोन numpy में, अमान्य हैं, जब तक कि यह असामान्य वाक्य रचना a = np.matrix('1,2,3;4,5,6') में लपेटा।

a = np.matrix('1,2,3,;;;;4,5,6;;;') 

रूप ; के रूप में किसी भी मामले में सरणी पंक्ति सेपरेटर, जो संकलक असंगत पंक्ति आकार के बारे में शिकायत करता है व्याख्या की है, साथ ही एक त्रुटि फेंक होगा।

हालांकि,

x = [1,2,3,] 

भी Python और IronPython में मान्य सिंटैक्स, के रूप में यह VBScript और Lua में है के रूप में mlepage's answer में उल्लेख किया है। इन सभी भाषाओं में आम क्या है? वे रनटाइम के दौरान व्याख्या की गई सभी (अधिक या कम) स्क्रिप्टिंग भाषाएं हैं। यह सिर्फ Matlab नहीं है। इसलिए ओपी का उत्साह बिना कारण के बनी हुई है।

+0

वह वास्तव में सही मायने रखता है। स्पष्टीकरण के लिए धन्यवाद। +1। – rayryeng

+6

मैं इसे मैथवर्क्स के रास्ते को फेंकने में उत्सुक हूं और अगर वे जवाब दे रहे हैं तो देख रहे हैं! – excaza

0

यह भाषाओं में विराम चिह्न अनुगामी अगर कभी कोड अन्य कोड से उत्पन्न किया जा रहा है की अनुमति के लिए सुविधाजनक है।

उदाहरण के लिए, लुआ अल्पविराम के अनुगामी की अनुमति देता है, तो यह लुआ कोड उत्पन्न करने के लिए आसान है।

आप विशेष मामला करने के लिए अंतिम अल्पविराम छोड़ पैदा कोड नहीं है, तो आप सिर्फ प्रत्येक और हर आइटम के लिए आइटम-से-COMMA मुद्रित कर सकते हैं।

+0

नहीं, वास्तव में बस ऐसा मत करो – Wolfie

संबंधित मुद्दे