मैं सभी प्राकृतिक संख्याओं को एक प्रमुख दहलीज तक, प्रमुख कारकों में उनके अपघटन के साथ उत्पन्न करना चाहता हूं।आदेशित अनंत अनुक्रमों की एक अनबाउंड संख्या विलय करना
vGenerate :: [a] -- generator set for monoid B* (Kleene star of B)
-> (a, (a -> a -> a)) -- (identity element, generating function)
-> (a -> Bool) -- filter
-> [a] -- B* filtered
vGenerate [] (g0,_) _ = [g0]
vGenerate (e:es) (g0,g) c =
let coEs = vGenerate es (g0,g) c
coE = takeWhile (c) $ iterate (g e) g0
in concatMap (\m -> takeWhile (c) $ map (g m) coE) coEs
जनरल फिर एक साथ अपने प्रधानमंत्री कारकों के साथ सभी प्राकृतिक संख्या उत्पन्न करता है:
मैं निम्नलिखित समारोह के साथ आया था
gen threshold =
let b = map (\x -> (x,[x])) $ takeWhile (<= threshold) primes
condition = (<= threshold) . fst
g0 = (1,[])
g = \(n,nl)(m,ml) -> ((n*m), nl ++ ml)
in vGenerate b (g0,g) condition
primes = [2,3,5,7,11,.. ] -- pseudo code
मैं निम्नलिखित प्रश्न हैं:
यह हमेशा पहले से ज्ञात नहीं है कि हमें कितनी संख्या की आवश्यकता होगी। क्या हम vGenerate को संशोधित कर सकते हैं जैसे कि यह प्राइम की आलसी अनंत सूची से शुरू होता है, और बढ़ते क्रम में सभी कारकों को उत्पन्न करता है? चुनौती यह है कि हमारे पास प्राइम की अनंत सूची है, प्रत्येक प्रधान के लिए उस प्राइम नंबर की शक्तियों की अनंत सूची है, और फिर सभी संभावित संयोजनों को लेना है। सूचियों को पहले तत्व को बढ़ाकर स्वाभाविक रूप से आदेश दिया जाता है, इसलिए उन्हें आलसी उत्पन्न किया जा सकता है।
मैंने इसे मोनोइड के संदर्भ में vGenerate दस्तावेज किया, इसे यथासंभव सार रखने के इरादे से, लेकिन शायद यह कोड को खराब कर देता है? मैं इसे बाद में सामान्य बनाना चाहता हूं (वास्तविक उपयोग के मुकाबले व्यायाम के रूप में अधिक), उदा। कुछ बाधाओं के भीतर रास्टर अंक उत्पन्न करने के लिए, जिसे मोनोइड संदर्भ में भी रखा जा सकता है, इसलिए मैंने सोचा कि समस्या स्थान के सभी संदर्भों से छुटकारा पाने के लिए यह एक अच्छी शुरुआत थी (casu: primes में)। लेकिन मुझे लगता है कि फ़िल्टरिंग फ़ंक्शन अबास्ट्रक्शन में अच्छी तरह से फिट नहीं होता है: पीढ़ी को उस क्रम में होना चाहिए जो सी द्वारा परीक्षण किए गए मीट्रिक के लिए एकनिष्ठ है, क्योंकि जैसे ही सी संतुष्ट नहीं होता है, रिकर्सन समाप्त हो जाता है। कोई सलाह?
धन्यवाद। यह वास्तव में गायब टुकड़ा है। – sleepyMonad