पर विचार करें description of filter
in the docs:
filter
, एक विधेय और एक सूची के लिए आवेदन किया, उन तत्वों को विधेय को संतुष्ट की सूची देता है; यानी,
filter p xs = [x | x <- xs, p x]
कोई है जो सूची comprehensions समझ में नहीं आता है, तो आप कह सकते हैं filter
तीन मामलों है करने के लिए यह व्याख्या करने के लिए: जब सूची होने के लिए
- (आसान मामले) फ़िल्टर खाली है, परिणाम भी खाली है
- जब सूची के प्रमुख को फ़िल्टर करने के लिए प्रमुख को संतुष्ट किया जाता है, तो यह परिणाम
- का हिस्सा है अन्यथा, सिर छोड़ें और शेष सूची को फ़िल्टर करें
ये मामले आपके प्रश्न में परिभाषा की अंतिम तीन पंक्तियों के साथ एक-दूसरे से मेल खाते हैं। एक खाली सूची के लिए
filter _ [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs
, विधेय कुछ भी हो सकता है, और अंडरस्कोर स्पष्ट रूप से पता चलता है कि यह उस स्थिति में महत्वहीन है:
छोटे छूता परिभाषा अधिक मुहावरेदार और इसलिए पढ़ने में आसान बना सकते हैं।
बल्कि (x:y)
के खिलाफ मिलान (x:xs)
बारे में सोचे का उपयोग कर, की तुलना में:, "पूर्व और व्यय" -emphasizes कि तुम और प्रकार [a]
की पूंछ ((प्रकार a
की) ने अपने सिर में एक सूची को अलग कर रहे हैं यानी, की सूची a
)।
अंत में, filter
पर रिकर्सिव कॉल को अस्तर में आसानी से पाठक को यह देखने की अनुमति मिलती है कि बाद वाला मामला x
को छोड़ देता है।
स्रोत
2010-04-02 18:23:33
@ जस्टिस: मुझे आश्चर्य है कि सुधार वैध है या नहीं।शायद ओपी वास्तव में अजीब लेआउट से उलझन में था? – kennytm