पायथन 3 से जूलिया तक आने से तेजी से इटरेटर को उपज/उपज सिंटैक्स या उस तरह के कुछ के साथ एक समारोह के रूप में लिखने में सक्षम होना पसंद होगा।क्या जुलिएआ में जनरेटर-जैसे कार्यों से तेज़ इटरेटर बनाने के लिए कोई मैक्रो है?
जूलिया के मैक्रोज़ सुझाव देते हैं कि कोई ऐसा मैक्रो बना सकता है जो इस तरह के "जेनरेटर" फ़ंक्शन को जूलिया इटरेटर में बदल देता है। [यह भी है कि आप आसानी से इनलाइन iterators समारोह शैली है, जो एक सुविधा Iterators.jl पैकेज भी अपनी विशिष्ट iterators https://github.com/JuliaCollections/Iterators.jl#the-itr-macro-for-automatic-inlining-in-for-loops के लिए प्रदान करने की कोशिश करता है में लिखा जा सकता था लगता है]
बस मैं क्या है का एक उदाहरण देने के लिए मन में:
@asiterator function myiterator(as::Array)
b = 1
for (a1, a2) in zip(as, as[2:end])
try
@produce a1[1] + a2[2] + b
catch exc
end
end
end
for i in myiterator([(1,2), (3,1), 3, 4, (1,1)])
@show i
end
जहां myiterator
आदर्श यथासंभव कम भूमि के ऊपर के साथ एक तेजी से इटरेटर बनाना चाहिए। और निश्चित रूप से यह केवल एक विशिष्ट उदाहरण है। मैं आदर्श रूप से कुछ ऐसा करना चाहता हूं जो सभी या लगभग सभी जनरेटर कार्यों के साथ काम करता हो।
जनरेटर फ़ंक्शन को एक पुनरावर्तक में बदलने के लिए वर्तमान में अनुशंसित तरीका कम से कम मेरे ज्ञान के लिए जूलिया के कार्य के माध्यम से है। हालांकि वे शुद्ध इटरेटर्स के रास्ते धीमा होने लगते हैं। उदाहरण के लिए यदि आप imap
, chain
जैसे सरल इटरेटर्स के साथ अपना फ़ंक्शन व्यक्त कर सकते हैं और इसी तरह (Iterators.jl
पैकेज द्वारा प्रदान किया गया) यह बहुत बेहतर लगता है।
क्या यह जूलिया में सैद्धांतिक रूप से संभव है कि मैक्रो कनवर्टिंग जेनरेटर-स्टाइल फ़ंक्शंस को लचीला तेज़ इटरेटर में बनाया जाए?
अतिरिक्त-बिंदु-प्रश्न: यदि यह संभव है, तो क्या एक सामान्य मैक्रो हो सकता है जो ऐसे इटरेटर को रेखांकित करता है?
'चैनल', जो 'टास्क की 0.6' को प्रतिस्थापित करता है, कार्य की तुलना में काफी तेज़ होना चाहिए। –
मैंने अभी तक उनके बारे में नहीं सुना है, और मैंने जुलिआ के बारे में बहुत सारे दस्तावेज पढ़े हैं। सूचक के लिए धन्यवाद! – schlichtanders
चैनल कार्य को प्रतिस्थापित नहीं करते --- वे एक तंत्र हैं जो कार्य संवाद करने के लिए उपयोग कर सकते हैं। –