मैं इडिस के साथ प्रयोग कर रहा हूं और ऐसा लगता है कि दो अलग-अलग संख्याओं के बीच सभी संख्याओं का प्रतिनिधित्व करने के लिए किसी प्रकार का प्रकार निर्दिष्ट करना सरल होना चाहिए। NumRange 5 10
5 और 10 के बीच सभी संख्याओं का प्रकार है। मैं युगल/फ्लोट्स को शामिल करना चाहता हूं, लेकिन पूर्णांक के साथ ऐसा करने के लिए एक प्रकार समान रूप से उपयोगी होगा। मैं ऐसा कैसे कर पाऊंगा?इडिस में एक प्रकार के रूप में एक संख्या सीमा निर्दिष्ट करने के लिए कैसे?
उत्तर
प्रैक्टिस में, आप बस आवश्यकतानुसार सीमाओं की जांच करने के लिए बेहतर कर सकते हैं, लेकिन आप निश्चित रूप से ऐसी संपत्ति को लागू करने के लिए डेटा प्रकार लिख सकते हैं। यह इस तरह है करने के लिए
एक सरल तरीके:
data Range : Ord a => a -> a -> Type where
MkRange : Ord a => (x,y,z : a) -> (x >= y && (x <= z) = True) -> Range y z
मैं इसे सामान्य रूप से लिखा है Ord
typeclass से अधिक है, हालांकि आप इसे विशेषज्ञ पड़ सकता है। रेंज आवश्यकता को समीकरण के रूप में व्यक्त किया जाता है, इसलिए आप इसे बनाने के दौरान Refl
की आपूर्ति करते हैं, और फिर संपत्ति की जांच की जाएगी। उदाहरण के लिए: MkRange 3 0 10 Refl : Range 0 10
। इस तरह की किसी चीज़ का एक नुकसान निहित मूल्य निकालने की असुविधा है। और निश्चित रूप से यदि आप प्रोग्रामेटिक रूप से एक उदाहरण बनाना चाहते हैं तो आपको सबूतों की आपूर्ति करने की आवश्यकता होगी कि सीमाएं वास्तव में संतुष्ट हैं, या फिर कुछ संदर्भ में ऐसा करें जो विफलता की अनुमति देता है, जैसे Maybe
।
हम बिना किसी परेशानी के Nat
एस के लिए एक और अधिक सुरुचिपूर्ण उदाहरण लिख सकते हैं, क्योंकि उनके लिए तुलनात्मक सबूत का प्रतिनिधित्व करने के लिए हमारे पास पहले से ही एक लाइब्रेरी डेटा प्रकार है। विशेष रूप से LTE
, जो कम से कम या बराबर का प्रतिनिधित्व करता है।
data InRange : Nat -> Nat -> Type where
IsInRange : (x : Nat) -> LTE n x -> LTE x m -> InRange n m
अब यह डेटा प्रकार अच्छी तरह से एक सबूत encapsulates है कि एन ≤ x ≤ मीटर। यह कई आकस्मिक अनुप्रयोगों के लिए अधिक होगा, लेकिन यह निश्चित रूप से दिखाता है कि आप इस उद्देश्य के लिए निर्भर प्रकारों का उपयोग कैसे कर सकते हैं।
- 1. हजारों विभाजक के रूप में एक स्थान के साथ एक संख्या मुद्रित करने के लिए कैसे?
- 2. उत्तर में एक चर के लिए एक यादृच्छिक संख्या असाइन करने के लिए कैसे?
- 3. एनोटेशन के साथ गैर आलसी के रूप में एक बीन निर्दिष्ट करने के लिए कैसे करें
- 4. प्रतिशत चिह्न के बिना प्रतिशत के रूप में एक संख्या को प्रारूपित करने के लिए कैसे?
- 5. कैसे संख्या की एक सरणी के लिए संख्या की एक स्ट्रिंग परिवर्तित करने के लिए?
- 6. प्रकार एक संख्या कास्टिंग दोगुना करने के लिए
- 7. ऑब्जेक्ट के रूप में एक चर निर्दिष्ट करने और ऑब्जेक्ट लिटल नोटेशन/ऑब्जेक्ट कन्स्ट्रक्टर नोटेशन के रूप में एक चर निर्दिष्ट करने के बीच क्या अंतर है?
- 8. क्या अजगर में कुछ सीमा में एक संख्या रखने के लिए एक अंतर्निहित कार्य है?
- 9. विशेष रूप से एक विशिष्ट मॉड्यूल के लिए जीसीसी झंडे (CXXFLAGS) निर्दिष्ट करने के लिए कैसे?
- 10. स्फिंक्स के लिए पाइथन डॉकस्ट्रिंग में चर के लिए एक प्रकार कैसे निर्दिष्ट करता है?
- 11. एंड्रॉयड: कैसे एक निजी संख्या प्रोग्राम के रूप में
- 12. एक और कस्टम जटिल प्रकार के लिए एक कस्टम जटिल प्रकार परिवर्तित करने के लिए कैसे
- 13. एक फ़ाइल में एक HttpResponse डाउनलोड करने के लिए कैसे?
- 14. एक कस्टम configSection में एक संग्रह निर्दिष्ट करने के लिए कैसे
- 15. टीएसक्यूएल - एक चर के रूप में एक क्वेरी निष्पादित करने के लिए कैसे?
- 16. कैसे एक UITableViewController प्रोग्राम के रूप में करने के लिए एक UIToolbar जोड़ने के लिए?
- 17. इडिस
- 18. गतिशील लेआउट में अपनी आईडी के लिए सुरक्षित संख्या सीमा?
- 19. रेल में सरणी में सीमा और ऑफ़सेट निर्दिष्ट करने के लिए कैसे?
- 20. कैसे एक persp में केवल हर दूसरे सीमा के लिए
- 21. इडिस
- 22. एफई में नहीं एक स्तंभ के रूप में एक संपत्ति मैप करने के लिए कैसे 4.1
- 23. AngularJS में एक ng शामिल निर्देश के लिए मॉडल निर्दिष्ट करने के लिए कैसे?
- 24. कैसे एक JSX नोड पर वर्ग निर्दिष्ट करने के लिए?
- 25. कैसे मिलीसेकंड करने के लिए एक स्ट्रिंग के रूप में प्रतिनिधित्व तिथि परिवर्तित करने के लिए?
- 26. हास्केल और इडिस के बीच अंतर: प्रकार सार्वभौमिक
- 27. आर को एक रेग्रेशन में संदर्भ के रूप में निर्दिष्ट कारक स्तर का उपयोग करने के लिए कैसे मजबूर करें?
- 28. कैसे समान रूप से एक div में तत्वों एक दूसरे के बगल वितरित करने के लिए?
- 29. कैसे आर में स्ट्रिंग प्रकार के एक चर में एक चरित्र को दूर करने के
- 30. एक दृढ़ में एक बहुरूपी संघ निर्दिष्ट करने के लिए कैसे
यहां देखें: http://hackage.haskell.org/package/type-natural-0.2.1.1/docs/Data-Type-Ordinal.html। 'साधारण 5' में सभी प्राकृतिक संख्या 0 से 4. –
शामिल हैं, आप 'एन 6 रेंज' के रूप में 'न्यूमेंज 5 10' का प्रतिनिधित्व कर सकते हैं, जिसमें' FZ' का प्रतिनिधित्व 5, 'एफएस एफजेड 6 का प्रतिनिधित्व करता है, और इसी तरह। – Cactus