有没有一种很好的方法可以在列表中找到第一次出现的构造函数,而下面的示例中没有显式的递归?
data Elem = A Int | B Char deriving Show
getA :: [Elem] -> Maybe Elem
getA [] = Nothing
getA (e:es) =
case e of
A a -> Just (A a)
_ -> getA es
Run Code Online (Sandbox Code Playgroud)
Dan*_*her 11
只是
import Data.Maybe (listToMaybe)
getA xs = listToMaybe [e | e@(A _) <- xs]
Run Code Online (Sandbox Code Playgroud)
附录:更好,未来使用空记录模式(kudos hammar):
getA xs = listToMaybe [e | e@(A{}) <- xs]
Run Code Online (Sandbox Code Playgroud)
但请注意,这只适用于匹配构造函数.对于一般属性,find更好:
get prop xs = listToMaybe [e | e <- xs, prop e]
get prop xs = listToMaybe (filter prop xs)
get prop xs = find prop xs
Run Code Online (Sandbox Code Playgroud)
ham*_*mar 11
你可以用Data.List.find.
getA = find isA
where isA (A {}) = True
isA _ = False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |