我希望找到一種更好的方法來解決我在 Haskell 中遇到的問題。
給定一個串列和一個條件,創建一個新串列,其中僅包含滿足條件的元素。以下是我使用的解決方案。有沒有更好的替代方案不涉及可能?
eg :: (Eq a, Num a) => (a -> Bool) -> [a] -> [a]
eg cond i = catMaybes (map (\x-> if cond x then Just x else Nothing) i)
uj5u.com熱心網友回復:
你eg相當于filter :: (a -> Bool) -> [a] -> [a]. 事實上,你可以過濾:
filter (\x -> some_condition x) my_list
some_condition例如,如果是一個簡單的a -> Bool函式,則相當于:
filter some_condition my_list
順便說一句,您的實作eg和帶有過濾器的實作都不需要Eq aandNum a型別約束:可以簡單地對cond x.
filter使用顯式遞回 [src] 實作:
filter :: (a -> Bool) -> [a] -> [a] filter _pred [] = [] filter pred (x:xs) | pred x = x : filter pred xs | otherwise = filter pred xs
在這里,對于一個空串列,它因此回傳空串列,并且當串列不為空時,它只會x在pred x滿足時前置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/423011.html
標籤:
下一篇:如何在Windows上獲取ar
