1

我有一个数据类型列表,如果存在,我想找到与第一个值匹配的数据类型。如果它不存在,我想返回一个默认值。

data MyType = MyType String Int
findOrMake :: [MyType] -> String -> Int
findOrMake list x = do  i <- -- find index
                        -- if i is a value, return the x[i]
                        -- if i is not a value, return (MyType x 0)

我有一种直觉,我应该使用fmapand find,但我以前从未使用过。

4

2 回答 2

4

要在未找到该项目时提供默认值,您可以使用fromMaybe

fromMaybe :: a -> Maybe a -> a

结合find,它应该看起来像这样:

fromMaybe defaultValue $ find predicate list
于 2012-11-22T18:21:21.840 回答
4

一个简单的递归解决方案怎么样?

data MyType = MyType String Int

findOrMake :: [MyType] -> String -> Int
findOrMake [] s = 42
findOrMake ((MyType mstr mint):ms) s = if mstr == s then mint else findOrMake ms s
于 2012-11-22T18:09:57.513 回答