Traversable
एक अर्थ में उन कंटेनरों की श्रेणी है जिनकी संरचना में "पथ" है (जो एक सूची के अनुरूप हो सकता है), जिन तत्वों को संरचना को भंग किए बिना संशोधित किया जा सकता है। इसलिएकिसी सूची के साथ ट्रैवर्स करने के लिए सबसे मानक/सामान्य तरीका क्या है?
zipTrav :: Traversable t => t a -> [b] -> Maybe (t (a,b))
zipTrav = evalStateT . traverse zp
where zp a = do
bs <- get
case bs of
[] -> lift Nothing
(b:bs') -> put bs' >> return (a,b)
हालांकि, यह सूची-राज्य ट्रैवर्सल थोड़ा हैकिश लगता है और संभवतः ऐसा करने का सबसे प्रभावी तरीका नहीं है। मुझे लगता है कि उपरोक्त या अधिक सामान्य कार्य पूरा करने वाला एक मानक कार्य होगा, लेकिन मैं यह नहीं समझ सकता कि यह क्या होगा।
@WillNess नाह, आपको सिर्फ यह जांचने की आवश्यकता है कि ट्रैवर्सिंग समाप्त होने के बाद इनपुट सूची में कुछ भी बचा है या नहीं। मैं अपना कोड –
@WillNess अपडेट करूंगा, मुझे लगता है कि यदि 'ट्रैवर्सबल' भरने के लिए सूची में पर्याप्त आइटम नहीं हैं तो प्रश्नकर्ता 'कुछ भी नहीं' वापस करना चाहता है। विचार –
आह मानों को जोड़ते समय इनपुट 'ट्रैवर्सबल' के आकार को रखना है, यह समझ में आता है। इसका मतलब है कि आपका पिछला संस्करण वास्तव में सही था। :) मैंने आपके पिछले संस्करण को बहाल कर दिया है, और एक स्पष्टीकरणपूर्ण उदाहरण जोड़ा है। इसके लिए क्षमा करें। –