यह बहुत आम है जहां मैं xs
तत्वों की कुछ सूची में आया हूं और प्रत्येक एनएच तत्व के साथ कुछ करने के लिए कुछ करना चाहता हूं। सबसे सरल उदाहरण चाइव या एरास्टोथेनेस होगा, जहां आप किसी दिए गए प्राइम के प्रत्येक बहुमत को "दस्तक देना" चाहते हैं। मैं इसे दो तरीकों से कर सकता हूं, एक काउंटर वेरिएबल के साथ गुजरने वाला स्पष्ट रिकर्सन होगा; या zipWith ($) (cycle (replicate (n-1) id ++ f))
। तो किस तरह से बेहतर/अधिक सुरुचिपूर्ण/अधिक सामान्य रूप से उपयोग किया जाता है, या क्या कुछ लाइब्रेरी फ़ंक्शन mapEveryN :: (a -> a) -> Int -> [a] -> [a]
है जो मुझे नहीं मिला है?हास्केल में, सूची के प्रत्येक एनएच तत्व में फ़ंक्शन को लागू करने का सबसे आम तरीका क्या है?
उत्तर
जैसा कि आप और भेलिलर उल्लेख करते हैं, cycle
इसे पूरा करने का एक अच्छा तरीका प्रदान करता है। आप थोड़ा हालांकि आलस्य का लाभ ले सकते:
mapEvery :: Int -> (a -> a) -> [a] -> [a]
mapEvery n f = zipWith ($) (drop 1 . cycle . take n $ f : repeat id)
zipWith
और cycle
के उपयोग अधिक मुहावरेदार एक हाथ से लिखा पुनरावर्ती क्रिया है कि दोनों कार्यों को जोड़ती है की तुलना में (जटिल सरल व्यवहार से बना व्यवहार) लगता है।
नोट: tail
यहां इस समारोह n = 0
के लिए अपरिभाषित तो drop 1
बेहतर है बनाता है।
इसके लिए लाइब्रेरी फ़ंक्शन नहीं है जिसके बारे में मुझे पता है।
किसी सूची के प्रत्येक 0 वें तत्व को कुछ करना संभवतः बकवास है, इसलिए उस मामले में फ़ंक्शन विफल होने के लिए बेहतर है। यदि किसी विशेष संदर्भ में यह समझ में आता है, आपको यह पता लगाना चाहिए कि एन = 0 के लिए उचित व्यवहार क्या है, "सुरक्षा" के नाम पर कुछ मनमानी तरीके से फ़ंक्शन को कुल मिलाकर नहीं। सौभाग्य से चक्र [] पहले से ही एक त्रुटि है, इसलिए 1 को छोड़ने वाली पूंछ को कोई प्रभाव नहीं पड़ता है। –
@ रीडबर्टन अच्छा बिंदु –
'प्रतिकृति' को 'टेक' पर स्विच करने के लिए अच्छा काम। मुझे लगता है कि यह क्लीनर है, मैं इसका इस्तेमाल करूंगा। धन्यवाद। –
- 1. बड़े मैट्रिक्स के प्रत्येक कॉलम में t.test को लागू करने का सबसे तेज़ तरीका क्या है?
- 2. अनुक्रम का प्रत्येक एनएच तत्व प्राप्त करना
- 3. क्या जंग के पास सरणी या वेक्टर में प्रत्येक तत्व को फ़ंक्शन/विधि लागू करने का कोई तरीका है?
- 4. "टाइमर" को लागू करने का सबसे अच्छा तरीका क्या है?
- 5. ओएस एक्स में विचारों के बीच स्वाइपिंग को लागू करने का सबसे अच्छा तरीका क्या है?
- 6. एनएच तत्व
- 7. क्या हास्केल के प्रकार वर्गों में बाधाओं को लागू करने का कोई तरीका है?
- 8. किसी सूची के सबसे आम तत्व कैसे ढूंढें?
- 9. सीएमकेई के साथ सूची में स्ट्रिंग को विभाजित करने का आम तरीका क्या है?
- 10. जे में हास्केल के फ़ोल्ड 1 को कार्यान्वित करने का सबसे प्रभावी तरीका क्या है?
- 11. हास्केल में विज्ञापन-प्रसार पॉलीमोर्फिज्म को लागू करने का सबसे अच्छा तरीका?
- 12. आर सूची के प्रत्येक तत्व के लिए lapply अलग फ़ंक्शन
- 13. प्रत्येक सूची तत्व पर int int() फ़ंक्शन?
- 14. पासवर्ड भूल गए: भूल गए पासवर्ड फ़ंक्शन को लागू करने का सबसे अच्छा तरीका क्या है?
- 15. हास्केल सूची में तत्व को प्रतिस्थापित करता है
- 16. डेल्फी में सी # के पृष्ठभूमिवर्कर को लागू करने का सबसे अच्छा तरीका क्या है?
- 17. कोको में स्रोत कोड के सिंटैक्स हाइलाइटिंग को लागू करने का सबसे अच्छा तरीका क्या है?
- 18. सहेजें/लोड कार्यक्षमता को लागू करने का तरीका क्या है?
- 19. एमवीसी का उपयोग कर एएसपी.नेट में एपीआई को लागू करने का सबसे अच्छा तरीका क्या है?
- 20. पायथन में एक सूची से प्रत्येक एनएच तत्व को हटा देना 2.7
- 21. सी # में प्रॉक्सी या सजावटी वर्ग को लागू करने का सबसे छोटा तरीका क्या है?
- 22. क्या सी # में फ़ंक्शन इनलाइनिंग को लागू करने का कोई तरीका है?
- 23. तत्व गुण प्राप्त करने का सबसे अच्छा तरीका क्या है?
- 24. जावा में 'है' करने का सबसे आसान तरीका क्या है?
- 25. पायथन: के लिए प्रत्येक सूची तत्व सूची
- 26. वर्ग द्वारा jQuery गिनती तत्व; इसे लागू करने का सबसे अच्छा तरीका क्या है?
- 27. फोनेटिक खोज को लागू करने का सबसे प्रभावी तरीका
- 28. रेल आवेदन में मतदान लागू करने का सबसे अच्छा तरीका?
- 29. jQuery में हर 5 सेकंड में फ़ंक्शन कॉल करने का सबसे आसान तरीका क्या है?
- 30. डार्ट में संग्रह/सूची में संख्याओं की संख्या प्राप्त करने का सबसे साफ तरीका क्या है?
ठीक है, आप 'ज़िप ($) ($ 1 $ चक्र $ f: प्रतिलिपि (एन -1) आईडी) ड्रॉप कर सकते हैं, जो मेरे लिए बहुत सुंदर लग रहा है। कोई स्पष्ट रिकर्सन नहीं है, आप concatenation से बचें और इसके बजाय ':' का उपयोग करें, और यह 1-लाइनर है। – bheklilr
आप किसी भी इंटरमीडिएट सूची को 'piecesOf n = unfoldr (बस। SplitAt n)' के साथ भी प्राप्त कर सकते हैं, फिर इसके साथ 'concatMap'। शायद अन्य विधियों के रूप में कम और कुशल नहीं है लेकिन कभी-कभी सुविधाजनक भी हो सकता है। –
@ एनएम। 'piecesOf'' n' के समूह बनाता है, उसके बाद उस समूह के बाद जो 'n' से कम हो सकता है, उसके बाद रिक्त समूहों की अनंत संख्या होती है। – pat