चैपल कटौती वर्तमान में चर के प्रारंभिक मानों को अनदेखा करती है। इसका मतलब है कि यह कोडनेस्टेड कटौती - चैपल में इन्हें लिखने का सबसे बेवकूफ तरीका क्या है?
var x: int;
for i in 1..3 {
forall j in 1..10 with (+ reduce x) {
x += 1;
}
}
writeln(x);
10 और 30 नहीं देता है, क्योंकि इस उपयोगकर्ता ने सोचा था। हालांकि यह व्यवहार ठीक है (और इसे कम करने वाले खंडों पर नोट्स में दस्तावेज किया गया है - मैंने अभी इसके बारे में कड़ी मेहनत नहीं की है), यह पता चला है कि अगर मैं 30 प्राप्त करना चाहता हूं (दोनों लूपों में जमा करके), मुझे इसकी आवश्यकता है वास्तव में हाथ से योग करते हैं। मुझे लगता है कि यह काफी सुंदर और for
छोरों के लिए सममित भी एक reduce
मंशा है के लिए होगा .... यानी मैं लिखने के लिए
var x: int;
for i in 1..3 with (+ reduce x) {
forall j in 1..10 with (+ reduce x) {
x += 1;
}
}
writeln(x);
ध्यान दें कि यहां तक कि संख्या संक्षेप के मामले में, मैं शुरू करने की जरूरत है चाहता हूँ एक अस्थायी चर। संचालन की तरह अधिकतम/मिनट के लिए, किसी और को भी सावधान रहने की आवश्यकता है।
क्या कोई कारण नहीं है कि reduce
लूप के अंदर इरादों का समर्थन न करें? वैकल्पिक रूप से, क्या ऐसा करने के लिए एक और मूर्खतापूर्ण (चैपल-कृत्रिम) तरीका है?
अद्यतन: जितना अधिक मैं इस बारे में सोचता हूं, यह स्पष्ट नहीं है कि मेरा प्रस्तावित कोड इस मामले में काम करेगा कि बाहरी for
को forall
द्वारा प्रतिस्थापित किया गया था। मुझे लगता है कि मुद्दा यह है कि वेरिएबल कार्य-स्थानीय हैं और पुनरावृत्ति-स्थानीय नहीं हैं, ताकि कमी केवल कार्यों पर ही हो। तो एक को अभी भी एक अलग आंतरिक कमी कदम की आवश्यकता होगी। यह एक अस्थायी चर की आवश्यकता है जो हटा देगा।
मुझे लगता है कि अधिक व्यापक सवाल क्या नेस्ट कटौती की इन प्रकार के ऐसा करने के लिए सही तरीका क्या है है ...
अपने प्रश्न में पहला कार्यक्रम अब काम करता है के रूप में आप पर उम्मीद:
चैपल 1.15.0 के रूप में, इससे बचने के लिए एक ही रास्ता धारावाहिक पाश के भीतर मैन्युअल रूप से कमी करने के लिए, इस प्रकार होगा चैपल की मास्टर शाखा (https://github.com/chapel-lang/chapel/pull/7351) और यह परिवर्तन अक्टूबर 2017 में चैपल 1.16 रिलीज में उपलब्ध होना चाहिए। – Brad
बीटीडब्लू, आपका कोड भी काम करता है (जेनरेट किया गया '30') जब मैंने बाहरी 'फॉर' को 'फॉरल' के साथ बदल दिया और इसी तरह के एक कम इरादे से बदल दिया। – Brad
मूल कोड ब्लॉक अब काम करता है जैसा कि आप चैपल 1.16 रिलीज़ में अपेक्षित थे। इस सुझाव के लिए धन्यवाद। – Brad