मैं एक सी # लड़का हूं जो खुद को एरिक मीजर के चैनल 9 वेबकास्ट से हास्केल सिखाने की कोशिश कर रहा है। मैं एक दिलचस्प पहेली में आया जिसमें ज़िप और मॉड का उपयोग करके सूची के प्रत्येक 'एन' तत्वों को छोड़ना शामिल था।हास्केल में असीमित दोहराने वाली सूची कैसे बनाएं?
every :: Int -> [a] -> [a]
every _ [] = []
every n xs = [x | (x,i) <- zip xs [1..], i `mod` n == 0]
मैं सोच रहा है यह (बहुत बड़ी सूची, या नदियों के लिए) और अधिक कुशल अगर हम आधुनिक का उपयोग कर से बचने के सकता है हो सकता है।
मैंने आलसी की दोहराई गई सूची बनाने के बारे में सोचा था ताकि हम आसानी से i से n के मूल्य की तुलना कर सकें।
repeatInts :: Int -> [Int]
ऐसी है कि फोन करने repeatInts 3
रिटर्न [1,2,3,1,2,3,1,2,3,1,2,3,..]
अनंत तक। मेरे सवालों का
every :: Int -> [a] -> [a]
every _ [] = []
every n xs = [x | (x,i) <- zip xs (repeatInts n), i == n]
तो है::
इस देखते हुए, हम every
इसलिए की तरह फिर से परिभाषित कर सकता है कि कैसे आप repeatInts
लागू होगा?
सीएफ। http://stackoverflow.com/questions/2026912/how-to-get-every-nth-element-of-an-infinite-list-in-haskell –