ज़िगोहिस्टोमॉर्फिक प्रीप्रोमोर्फिम्स के वास्तविक-विश्व अनुप्रयोग


156

हाँ, ये हैं :

{-#LANGUAGE TypeOperators, RankNTypes #-}
import Control.Morphism.Zygo
import Control.Morphism.Prepro
import Control.Morphism.Histo
import Control.Functor.Algebra
import Control.Functor.Extras
import Control.Functor.Fix
import Control.Comonad.Cofree

zygohistomorphic_prepromorphism 
  :: Functor f
  => Algebra f b
  -> GAlgebra f (ZygoT (Cofree f) b) a 
  -> (f :~> f) 
  -> FixF f 
  -> a
zygohistomorphic_prepromorphism f 
  = g_prepro (distZygoT (liftAlgebra f) (distHisto id))

हां, मुझे पता है कि वे एक ( HHOS ) मजाक हैं। मैं साधारण हैक मान और अंतिम के लिए एक वास्तविक दुनिया उदाहरण की तलाश कर रहा हूं, लेकिन कम से कम, यह कहते हुए विकी से जोड़ने के लिए "यह एक्सवाईजेड को व्यक्त करने का एक आदर्श तरीका है"। मैं इस पर एक इनाम दूंगा कि क्या आपको समाधान के साथ आने में विफल होना चाहिए। यदि आप पूरी तरह से खो गए हैं कि वे किस बारे में हैं, तो एडवर्ड ने रेडिट पर एक संक्षिप्त विवरण पोस्ट किया ।

योग्य उत्तर चाहिए:

  1. कम से कम दूर से और सैद्धांतिक रूप से कम्प्यूटेशनल रूप से उपयोगी कुछ करें। यही कारण है कि जवाब है कि idबाहर कम कर रहे हैं।

  2. स्कीम की सभी विशेषताओं का उपयोग करें, आईडी या पास या पास के बराबर नहीं।

  3. समान रूप से अच्छी तरह से एक साधारण, वेनिला गुना या इस तरह से व्यक्त नहीं किया जा सकता है, इसलिए केवल productएक मनोरंजक तरीके से लागू न करें ।

बोनस अंक दिए जाएंगे:

  • अच्छी तरह से ज्ञात समस्या या एल्गोरिथ्म

  • हल किया, क्रमशः व्यक्त किया, एक असामान्य तरीके से कि लाभ

  • स्पष्टता और / या प्रदर्शन

  • और / या हैक मूल्य

  • और / या लुलज़, मोटे तौर पर उस क्रम में, साथ ही साथ

  • उच्च रैंकिंग के उत्तर (याय लोकतंत्र)

कृपया नीचे एडवर्ड का जवाब भी नोट करें। आप किस ZHPM कार्यान्वयन का उपयोग करते हैं यह आपकी पसंद है।


5
यदि आपने IOअपने स्टैक में शामिल किया था , तो हम साइमनपीजे के प्रसिद्ध launchMisslesफ़ंक्शन का उपयोग कर सकते थे । लेकिन मुझे लगता है कि सुपर-शुद्ध अमूर्त बकवास के सभी बिंदु इस तरह की चीजों की संभावना से बचने के लिए है।
Yitz

6
खैर, aकुछ भी हो सकता है, इसलिए IO मूल्य का निर्माण करने के लिए स्वतंत्र महसूस करें जो रणनीतिक रूप से आपके इनपुट डेटा के आकलन के आधार पर मिसाइलों को लॉन्च करता है।
बारसोई

49
मैंने इस सवाल पर क्लिक किया क्योंकि मुझे पता नहीं था कि आप किस नरक की बात कर रहे हैं। +1 अच्छा साहब, +1
ड्रयू

7
कोई भी सभी घटकों का उपयोग करने की तलाश में मैन्युअल रूप से लिखने के लिए अच्छा होगा कि एक zygohistomorphic prepromorphism recursion का विस्तार क्या होता है, और फिर उन समस्याओं की तलाश करें जो इन सभी पैटर्न की आवश्यकता होती हैं; अनिवार्य लूप्स मनमाने ढंग से जटिल ट्रैकिंग करते हैं, इसलिए वे देखने के लिए एक अच्छी जगह हो सकती है।
एडवर्ड जेड यांग

3
और अधिक महत्वपूर्ण - यह मिश्रण होगा? (बहुत खेद है, विरोध नहीं कर सकता)
n00b

जवाबों:


52

शेरोन कर्टिस और शिन-चेंग म्यू के पास मैक्सिमली सेंसस सेगमेंट (अधिकतम सेग्मेंट सैम्स का एक सामान्यीकरण) खोजने के लिए जाइगोमोर्फिम्स का उपयोग करके एक फंक्शनल पर्ल है। एक बार जब आप उनके आदी हो जाते हैं, तो ज़िगोमोर्फिफ़िस फिसलने वाली खिड़की की समस्याओं के लिए एक अच्छा फिट है।

http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/

मैं लेखकों को अतिरिक्त क्रेडिट के लिए नामांकित करता हूं क्योंकि उन्होंने फिक्स्ड-पॉइंट म्यू फ़ंक्टर के उपयोग से बचा है।


स्किमिंग से, मुझे लगता है कि मैं देखता हूं कि DRSP को ट्रैक करते समय वे कैसे हिस्टो का उपयोग करते हैं (उसी अर्थ में कि एक साधारण foldrपहले से निर्मित सूची को देख सकता है), लेकिन प्रीप्रो मुझे तुरंत स्पष्ट नहीं है। क्या आप विस्तृत कर सकते हैं? (और, यदि संभव हो तो, छोटे + मीठे कोड दें जो हम विकी पेज पर काम कर सकते हैं?)
बारसो

3
कोड लैंडिंग पृष्ठ पर इरेटा के नीचे एक लिंक से उपलब्ध है। ज़िगोमोर्फिज्म की वास्तविक परिभाषा फ़ाइल में है। मेन - पेपर में परिभाषा के लिए इसका अलग। यह "सिर्फ" एक ज़िगोमोर्फिज्म है न कि "ज़िगोहिस्टोमॉर्फ़िक प्रीप्रोमोर्फिज्म" - एक ज़िगोमोर्फिज्म वह निकटतम चीज़ है जिसे मैंने एक वास्तविक दुनिया के उपयोग के साथ देखा है। हालांकि गतिशील प्रोग्रामिंग के लिए हिस्टोमोर्फिम्स
टेटली

39

ध्यान दें, इनमें से हस्ताक्षर बदल गए हैं, क्योंकि यह अपर्याप्त रूप से सामान्य था, और मैंने इसे अपने पुनरावृत्ति-योजना पैकेज में शामिल किया था।

zygoHistoPrepro 
  :: (Unfoldable t, Foldable t) 
  => (Base t b -> b) 
  -> (forall c. Base t c -> Base t c) 
  -> (Base t (EnvT b (Stream (Base t)) a) -> a) 
  -> t
  -> a

कार्यान्वयन को सरल बनाया गया था।

zygoHistoPrepro f = gprepro (distZygoT f distHisto)

और नए कार्यान्वयन से यह स्पष्ट होना चाहिए कि कैसे लागू किया जाए सामान्यीकृत जाइगोइस्टोमोर्फिक प्रीप्रोमोर्फिज्म जाए, इसके बजाय आप (Base t)-Branchingके उपयोग के माध्यम से, एक बाधा को आराम distGHistoकरने से।


2
आह हाँ बिल्कुल स्पष्ट।
बेन लोंगो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.