ऑक्टेव में एक अनाम फ़ंक्शन का उपयोग करके वेक्टर में तत्वों को स्वैप कैसे करें?


15

सप्तक में वेक्टर / मैट्रिक्स में दो तत्वों की अदला-बदली बहुत सरल है:

x='abcde';
x([4,1])=x([1,4])
x = 
   dbcae

दुर्भाग्य से, मुझे अभी तक एक अनाम फ़ंक्शन के अंदर ऐसा करने का कोई तरीका नहीं मिला है। जबकि नीचे दिया गया कार्य वाक्य-विन्यास सही है, यह केवल दो तत्वों की अदला-बदली करता है, न कि संपूर्ण xवेक्टर:

f=@(x)(x([4,1])=x([1,4]))
f(x)
ans = 
     ad

क्या गोल्फ में गुमनाम कार्यों का उपयोग करके वांछित व्यवहार को प्राप्त करने का एक तरीका है? क्या अनाम फ़ंक्शन का उपयोग करके कई तत्वों को इस तरह स्वैप किया जा सकता है?

मैं एक अनुक्रमण वेक्टर बना सकता हूं : f=@(x)x([4,2,3,1,5])लेकिन इस तरह के वेक्टर को गतिशील रूप से बनाने से बहुत अधिक बाइट्स भी लगेंगे।


जवाबों:


21

तर्क सूची

f=@(x,y=x([4 1])=x([1 4]))x;

इसे ऑनलाइन आज़माएं!


5
रुको क्या ? मुझे कभी नहीं पता था कि यह ऑक्टेव में संभव था। यह कई नई तकनीकों को खोलता है ....
Sanchises

4
क्या में ...?
स्टीवी ग्रिफिन

1
कृपया इसे Octave प्रश्न के लिए टिप्स में पोस्ट करें! इस तकनीक के साथ, आप मूल रूप से तर्क सूची में सब कुछ कर सकते हैं, इसलिए आपको फिर से 'पूर्ण' और अनाम फ़ंक्शन के बीच चयन करने की आवश्यकता नहीं है। मैं हैरान हूँ।
Sanchises

3
गजब का। BTW, आप ;बाइट काउंट के उद्देश्यों के लिए फाइनल निकाल सकते हैं
लुइस मेंडो

सभी को धन्यवाद। @ Sanchises ऐसा लगता है कि ऑक्टेव एक चौंकाने वाली भाषा है। सावधान रहे! इसे युक्तियों में जोड़ा जाता है।
rahnema1

11

होना eval

f=@(x)eval"x([4 1])=x([1 4])"

इसे ऑनलाइन आज़माएं!


मतलाब में कोष्ठकों को छोड़ा नहीं जा सकता है:

f=@(x)eval('x([4 1])=x([1 4])')

9
पीपीसीजी पर केवल evalउत्तर है :-)
स्टीवी ग्रिफिन

आप जोड़ना चाहते हैं इस सप्टक सुझावों प्रश्न के लिए? forएक अनाम फ़ंक्शन के अंदर लूप evalने बहुत सारे बाइट्स को बचाया, और शायद यह कई अन्य चुनौतियों पर भी कर सकता है ,,,
स्टिव ग्रिफिन

यकीन नहीं होता कि यह कभी गोल्फ खिलाड़ी है, लेकिन मुझे लगता है कि आप इसे गुमनाम समारोह के बिना भी कर सकते हैं: s='x([1 4])=x([4 1])';eval(s)- मुझे लगता है कि यह सबसे दिलचस्प है अगर आपने पहले से ही कम से कम चार्ट के साथ निकासी करने के लिए एक समारोह बनाया है।
डेनिस जहरुद्दीन


2
मुझे लगता है कि यह उत्तर एकमात्र ऐसा है जो वैध ओक्टेव और मतलाब दोनों है।
बैटमैन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.