गुणा प्रतीक "*" "टेन्सर" के साथ, और बिजली प्रतीक "^" "p_tensor" का उपयोग निम्नलिखित प्रतिस्थापन के नियमों के साथ स्थानापन्न करना चाहते हैं:एडब्ल्यूके या sed या पर्ल के साथ ऐसे प्रतिस्थापन कैसे करें?
a(k)^n --> p_tensor(n,a(k))
a(i)*a(j) --> tensor(a(i),a(j)), when i=/=j
लेकिन प्रतीक "*" एक नंबर के बीच है कि कब और एक (i), जैसे कि 3 * ए (i), हमें प्रतीक "*" रखना चाहिए जैसा कि यह है।
तो उदाहरण के लिए,
5*a(i)*a(j)*(a(k1)+3*a(k2)) --> 5*tensor(tensor(a(i),a(j)),a(k1)+3*a(k2))
a(i)^2*a(j)^2 --> tensor(p_tensor(2,a(i)),p_tensor(2,a(j)))
...
अब मैं निम्नलिखित AWK अभिव्यक्ति का उपयोग कर या sed या पर्ल पुन: प्रारूपित करना चाहते हैं:
3*a(3)^2+6*a(1)^2*(5*a(2)^2-2*a(4))+6*a(2)*a(4)+6*a(1)*(-4*a(2)*a(3)+a(5))
कोई भी विचार कैसे?
प्रतिस्थापन के बाद अपेक्षित परिणाम हो
3*p_tensor(2,a(3))+6*tensor(p_tensor(2,a(1)),(5*p_tensor(2,a(2))-2*a(4))+6*tensor(a(2),a(4))+6*tensor(a(1),(-4*tensor(a(2),a(3))+a(5))
आप '' '' 'tensor' के साथ कुछ क्यों बदलते हैं, लेकिन दूसरों को नहीं? हां, पहला '3 * ए (3)^2' ऐसा लगता है कि यह 'टेंसर (3, पी_टेन्सर (2, ए (3)) होना चाहिए। – ceyko
हां, मुझे इसका जिक्र करना चाहिए," टेंसर "का उपयोग केवल तभी किया जाता है प्रतीक "*" को प्रतिस्थापित करें जो दो (i) –
के बीच एक बाइनरी ऑपरेटर है, मैं इसे करने के लिए एक आसान तरीका नहीं सोच सकता, खासकर उस विशेष मामले के साथ ... कम से कम किसी भी साफ तरीके से नहीं। आप चाहें एक अभिव्यक्ति वृक्ष में मूल अभिव्यक्ति को पार्स करने के लिए, और उसके बाद इसे अपने परिचालनों का उपयोग करने के लिए परिवर्तित करना। – ceyko