एफ # कल्पना (§6.5.7 देखें) के अनुसार, छोरों के लिए सरल पूर्णांक (int
उर्फ int32
उर्फ System.Int32
) की सीमा start
और stop
, उदा से घिरा रहे हैंलूप अभिव्यक्तियों के लिए पूर्णांक सीमाओं तक सीमित क्यों हैं?
for i = start to stop do
// do sth.
मुझे आश्चर्य है कि क्यों पाश के लिए इस प्रकार के यात्रा सीमा int32
होना भी आवश्यक है। uint32
क्यों न दें? int64
? bigint
?
मुझे पता है कि अनुक्रम पुनरावृत्ति अभिव्यक्ति (for ... in ...
) मनमाने ढंग से अनुक्रमों पर फिर से शुरू हो सकती है; हालांकि, इसे एक पुनरावर्तक आवंटित करने और MoveNext
और Current
पर कॉल करने की आवश्यकता होती है और सादे लूप की तुलना में काफी कम कुशल नहीं हो सकता है (वृद्धि काउंटर, तुलना, conditonal कूद)। कि बचने के लिए आप, while
और एक मैन्युअल रूप से बढ़ाने पाश काउंटर का उपयोग कर के साथ फंस रहे हैं ...
एफ # , अगर for
अभिव्यक्ति एक दृश्य अभिव्यक्ति में लपेटा जाता है, गैर int32
पाश सीमा की अनुमति नहीं है जैसे
seq { for i = 0I to 10I do
printfn "%A" i }
तो, मुझे लगता है कि सवाल यह है: वहाँ केवल छोरों के लिए int32
अनुमति देने के लिए एक विशेष कारण है? और seq
अभिव्यक्तियों में लिपटे for
लूप पर यह प्रतिबंध क्यों लागू नहीं होता है?
सामान्य में, नेट ढांचे 'int' एक सामान्य प्रयोजन पूर्णांक के रूप में उपयोग करता है, संख्यात्मक अनुक्रमण परिदृश्यों के सभी प्रकार में इसके उपयोग भी शामिल है। उदाहरण: http://msdn.microsoft.com/en-us/library/system.array.indexof(v=vs.71).aspx। काउंटर उदाहरण: http://msdn.microsoft.com/en-us/library/system.io.filestream.position.aspx, जो लंबे समय तक उपयोग करता है। –
एफ # कार्यात्मक प्रोग्रामिंग को प्रोत्साहित करता है और इसलिए पूर्ण अनिवार्य समर्थन से कम रोकता है (उदाहरण के लिए, 'ब्रेक'/'रिटर्न' की कमी)। एक गणना अभिव्यक्ति 'के लिए' एक विधि कॉल से वंचित है, जो एक लूप की तरह अनिवार्य रूप से अनिवार्य नहीं है, और इसलिए समान सीमाएं नहीं हैं। हालांकि मैं रहस्य को समझ सकता हूं। +1 – Daniel
@ डैनियल +1 "एक गणना अभिव्यक्ति के भीतर एक विधि कॉल के लिए desugared है"। समझा; वास्तव में 'seq {के लिए जेनरेट किया गया कोड .. करने के लिए .. .. ..' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '। – Frank