मैं कोड है कि इस के समान दिखता है लिख रहा हूँ:आप एक गणक को कैसे डिजाइन करते हैं जो (सैद्धांतिक रूप से) वस्तुओं की एक अनंत राशि देता है?
public IEnumerable<T> Unfold<T>(this T seed)
{
while (true)
{
yield return [next (T)object in custom sequence];
}
}
जाहिर है, इस विधि कभी नहीं लौटने के लिए जा रहा है। (सी # संकलक चुपचाप इस अनुमति देता है, जबकि आर # मुझे चेतावनी "समारोह रिटर्न कभी नहीं" देता है।)
सामान्य शब्दों में, यह बुरा एक प्रगणक कि मदों की एक अनंत संख्या देता है प्रदान करने के लिए डिजाइन है, बिना गणना करने के लिए एक रास्ता की आपूर्ति?
क्या इस परिदृश्य के लिए कोई विशेष विचार है? मेम? पर्फ़? अन्य गॉथस?
यदि हम हमेशा बाहर निकलने की स्थिति की आपूर्ति करते हैं, तो कौन से विकल्प हैं? उदाहरण के लिए:
- प्रकार टी का एक उद्देश्य है कि समावेशी या विशेष सीमा
- एक
Predicate<T> continue
(TakeWhile
के रूप में करता है) - गिनती का प्रतिनिधित्व करता है (
Take
करता है) - ...
क्या हमें Unfold(...)
के बाद Take(...)
/TakeWhile(...)
पर कॉल करने वाले उपयोगकर्ताओं पर भरोसा करना चाहिए? (शायद पसंदीदा विकल्प, क्योंकि यह मौजूदा लिंक ज्ञान का लाभ उठाता है।)
क्या आप इस प्रश्न का अलग-अलग जवाब देंगे यदि कोड सार्वजनिक एपीआई में प्रकाशित किया जा रहा था, या तो (जेनेरिक) या एक विशिष्ट कार्यान्वयन के रूप में यह पैटर्न?
बीटीडब्ल्यू, आप अपने प्रश्न के संबंध में यह दिलचस्प पा सकते हैं: http://blogs.msdn.com/b/wesdyer/archive/2007/02/13/the-virtues-of-laziness.aspx – joce