এই কোডটি আমি কোথাও এসেছি কিন্তু এটি কীভাবে কাজ করে তা জানতে চাই:
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)
আমি দেখতে পেয়েছি যে এর অর্থ পূর্বের (এসএনডি (এক্স)) এর মতো কিছু। আমার প্রশ্ন, এক্সটি কি জিপ লাইন থেকে তৈরি তালিকা? আমি হ্যাঁর দিকে ঝুঁকছি তবে আমার অনুমানটি খুব কম।
এর পরে, 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] দেবে
এটি সামগ্রিকভাবে কীভাবে কাজ করে? আমি মনে করি আমি এ পর্যন্ত যা জানি আমি তার মধ্যে ব্যাপক ছিলাম তবে টুকরাগুলি একসাথে রাখতে পারি না। কেউ আমাকে সাহায্য করতে পারেন?