Thursday 15 March 2012

haskell - How do I take the last n elements of a list -


अंतिम n एक सूची xs के तत्वों को प्राप्त करने के लिए रिवर्स (लेफ्ट एन (रिवर्स एक्सएस)) का उपयोग कर सकते हैं, लेकिन यह बहुत अच्छा कोड नहीं है (यह कुछ भी लौटने से पहले स्मृति में पूरी सूची रखता है, और परिणाम मूल सूची से साझा नहीं किया जाता है)।

मैं हाकेल में lastR फ़ंक्शन कैसे लागू कर सकता हूं?

इसमें केवल एक बार सूची की लंबाई को दोहराते हुए की संपत्ति होनी चाहिए। ड्रॉप n और zipLeftover के लिए n - 1 के लिए एन।

  zipLeftover :: [a] - & gt; [ए] - & gt; [ए] ज़िप लिफ्टवोवर [] [] = [] ज़िप लोफ्टवोस्ट एक्सएस [] = एक्सएस ज़िप लोफ्टवेयर [] वाईएस = वाईएस ज़िप लोफ्टवायर (एक्स: एक्सएस) (वाई: वाईएस) = ज़िप लिफ्टवायर एक्सएस वाईएसएफ़ेडएन :: इंट - & gt; [ए] - & gt; [ए] अंतिम एन एन एक्स = ज़िप लाफ्टर (ड्रॉप एन एक्सएस) xs   

यहां एक विकल्प छोटा और शायद बेहतर है क्योंकि सात्वीक ने बताया कि अक्सर पुनरावर्तन ऑपरेटरों का उपयोग करना बेहतर होता है, फिर स्पष्ट पुनरावृत्ति। <पूर्व> ले लोफ्टोवर :: [ए] - & gt; टी - & gt; [ए] ले लोफ्टवोवर [] _ ​​= [] लेफ्टोवर (x: xss) _ = xss lastN ':: इंट - & gt; [ए] - & gt; [ए] अंतिम एन 'एन एक्सएस = गुड़' ले लोफ्टवोवर एक्सएस (ड्रॉप एन एक्सएस)

इसके साथ ही विल नेस की टिप्पणी को भी ध्यान दें कि ले लाफ्तोवर बस है: <पूर्व> ले लोफ्टवोवर == कॉन्स्ट ड्रॉप 1

जो चीज़ों को सुव्यवस्थित बनाता है:

  lastN ':: int - & gt; [ए] - & gt; [ए] अंतिम एन 'एन एक्सएस = गुड़' (कॉन्स्ट। 1 ड्रॉप) एक्स (ड्रॉप एन एक्स) - या - आखिरी एन 'एन एक्सएस = फोल्ड' (कॉन्स्ट। 1 ड्रॉप 1) & lt; * & gt; ड्रॉप n    

No comments:

Post a Comment