यह वह कोड है जो मैं कहीं पर आया था लेकिन जानना चाहता हूं कि यह कैसे काम करता है:
findIndices :: (a -> Bool) -> [a] -> [Int]
findIndices _ [] = []
findIndices pred xs = map fst (filter (pred . snd) (zip [0..] xs))
आउटपुट: findIndices (== 0) [1,2,0,3,0] == [2,4] , जहां पूर्व (== 0) और xs है [1,2,0,3,0]
मैं अपनी समझ दिखाऊंगा:
(zip [0..] xs)
उपर्युक्त पंक्ति क्या करती है सूची में सब कुछ के लिए सूचकांक डालते हैं। ऊपर दिए गए इनपुट के लिए, यह इस तरह दिखेगा: [(0,1), (1,2), (2,0), (3,3), (4,0)]
(pred . snd)
मैंने पाया कि इसका मतलब पूर्व (snd (x)) जैसा है। मेरा प्रश्न यह है कि क्या zip लाइन से बनाई गई सूची x है? मैं हाँ की ओर झुक रहा हूँ, लेकिन मेरा अनुमान भड़कीला है।
अगला, मेरी समझ है कि fst और snd। मुझे पता है
fst(1,2) = 1
तथा
snd(1,2) = 2
ये 2 कमांड कोड में कैसे समझ में आते हैं?
फ़िल्टर के बारे में मेरी समझ यह है कि यह उन वस्तुओं की सूची देता है जो किसी शर्त से मेल खाते हैं। उदाहरण के लिए,
listBiggerThen5 = filter (>5) [1,2,3,4,5,6,7,8,9,10]
देना होगा [6,7,8,9,10]
मानचित्र की मेरी समझ यह है कि यह सूची के प्रत्येक आइटम पर एक फ़ंक्शन लागू करता है। उदाहरण के लिए,
times4 :: Int -> Int
times4 x = x * 4
listTimes4 = map times4 [1,2,3,4,5]
दे [4,8,12,16,20]
यह कैसे काम करता है? मुझे लगता है कि मैं अब तक जो कुछ भी जानता हूं उसमें व्यापक रहा हूं लेकिन टुकड़ों को एक साथ नहीं रख सकता। क्या कोई व्यक्ति मेरी सहायता कर सकता है?