में फिक्स, म्यू और नू के बीच का अंतर एड Kmett के recursion-scheme
पैकेज में तीन घोषणाओं, वहाँ रहे हैं?क्या एड Kmett के प्रत्यावर्तन योजना पैकेज
उत्तर
Mu
एक रिकर्सिव प्रकार को इसके गुना के रूप में दर्शाता है, और Nu
इसे इसके सामने प्रकट करता है। हास्केल में, ये आइसोमोर्फिक हैं, और एक ही प्रकार का प्रतिनिधित्व करने के विभिन्न तरीके हैं। यदि आप दिखाते हैं कि हास्केल में मनमाने ढंग से रिकर्सन नहीं है, तो इन प्रकारों के बीच भेद अधिक दिलचस्प हो जाता है: Mu f
f
का कम से कम (प्रारंभिक) निश्चित बिंदु है, और Nu f
इसका सबसे बड़ा (टर्मिनल) निश्चित बिंदु है।
f
का एक निश्चित बिंदु एक प्रकार T
T
और f T
के बीच समाकृतिकता है, यानी उलटा कार्यों in :: f T -> T
, out :: T -> f T
की एक जोड़ी है। प्रकार Fix
सीधे आइसोमोर्फिज्म घोषित करने के लिए हास्केल के अंतर्निर्मित प्रकार रिकर्सन का उपयोग करता है। लेकिन आप Mu
और Nu
दोनों के लिए इन/आउट को कार्यान्वित कर सकते हैं।
एक ठोस उदाहरण के लिए, एक पल का नाटक करें कि आप रिकर्सिव मान नहीं लिख सकते हैं। Mu Maybe
के निवासियों, यानी :: forall r. (Maybe r -> r) -> r
, प्राकृतिक हैं, {0, 1, 2, ...}; Nu Maybe
के निवासियों, यानी :: exists x. (x, x -> Maybe x)
मानदंड हैं, 0 0, 1, 2, ..., ∞} हैं। इन प्रकारों के संभावित मूल्यों के बारे में सोचें कि Nu Maybe
में एक अतिरिक्त निवासी क्यों है।
आप इन प्रकार के कुछ अंतर्ज्ञान प्राप्त करना चाहते हैं, यह प्रत्यावर्तन के बिना निम्नलिखित लागू करने के लिए (मोटे तौर पर कठिनाई के बढते क्रम में) एक मजेदार व्यायाम किया जा सकता है:
zeroMu :: Mu Maybe
,succMu :: Mu Maybe -> Mu Maybe
zeroNu :: Nu Maybe
,succNu :: Nu Maybe -> Nu Maybe
,inftyNu :: Nu Maybe
muTofix :: Mu f -> Fix f
,fixToNu :: Fix f -> Nu f
inMu :: f (Mu f) -> Mu f
,outMu :: Mu f -> f (Mu f)
inNu :: f (Nu f) -> Nu f
,outNu :: Nu f -> f (Nu f)
आप भी इन लागू करने के लिए कोशिश कर सकते हैं, लेकिन वे प्रत्यावर्तन की आवश्यकता होती है:
nuToFix :: Nu f -> Fix f
,fixToMu :: Fix f -> Mu f
Mu f
कम से कम तय बिंदु है, और Nu f
है सबसे महान, इसलिए एक समारोह लिखना :: Mu f -> Nu f
बहुत आसान है, लेकिन एक समारोहलिखनाकठिन है; यह वर्तमान के खिलाफ तैराकी की तरह है।
(पर एक बिंदु मैं इन प्रकार के एक अधिक विस्तृत विवरण लिखने के लिए अर्थ था, लेकिन यह एक छोटे से भी इस प्रारूप के लिए लंबे समय तक हो सकता है।)
- 1. संसाधन जो एडवर्ड Kmett के लेंस पैकेज
- 2. प्रत्यावर्तन
- 3. प्रत्यावर्तन
- 4. प्रत्यावर्तन
- 5. एड-माइग्रेशन
- 6. स्विफ्ट: एक प्रत्यावर्तन
- 7. अजगर प्रत्यावर्तन RuntimeError
- 8. ग strtok प्रत्यावर्तन
- 9. ब्लॉक प्रत्यावर्तन और चक्र
- 10. Django प्रत्यावर्तन खोल
- 11. अजगर पिकलर - प्रत्यावर्तन गहराई
- 12. प्रिंट सभी प्रत्यावर्तन/ढेर
- 13. डबल स्ट्रिंग प्रत्यावर्तन
- 14. आर - अधिलेखित और प्रत्यावर्तन
- 15. अधिकतम प्रत्यावर्तन गहराई
- 16. Prolog भाज्य प्रत्यावर्तन
- 17. निचिंग योजना क्या है?
- 18. योजना के साथ वेब स्क्रैपिंग
- 19. "गिट एड"
- 20. 'गिट एड' और 'गिट एड-यू' के बीच क्या अंतर है?
- 21. गिट एड * और गिट एड के बीच क्या अंतर है, यदि कोई है?
- 22. यूआरएल योजना यूआरएल योजना
- 23. एफ # निरंतरता के आधार पर पूंछ प्रत्यावर्तन
- 24. मैं एक प्रत्यावर्तन विश्लेषण उपकरण
- 25. अजगर में अच्छा प्रत्यावर्तन प्रदर्शन
- 26. प्रोग्रामेटिक गैर पूंछ प्रत्यावर्तन उन्मूलन
- 27. क्या गिट एड के फ़ाइलपटल के लिए नकारात्मक वाक्यविन्यास है?
- 28. "गिट एड" के समकक्ष सबवर्सन?
- 29. योजना
- 30. योजना
मैं बहुत अधिक सिद्धांत पता नहीं है, लेकिन मुझे लगता है कि इकट्ठा अधिक प्रमाणित भाषाओं के लिए, 'Mu' कम से कम निश्चित बिंदु है और' Nu' सबसे बड़ा निश्चित बिंदु है। हास्केल में, इन तीनों को समकक्ष माना जाता है (मुझे विश्वास है)।ध्यान दें कि 'Nu' के लिए' Mu' और 'ana 'के लिए' cata' को लागू करना बहुत आसान है। – dfeuer
इस कटा को हल करने का प्रयास करें https://www.codewars.com/kata/folding-through-a-fixed-point/haskell – xgrommx