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)

fmapとを使うべき直感がありますfindが、これまで使ったことがありません。

4

2 に答える 2

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 に答える
4

アイテムが見つからない場合のデフォルトを提供するには、次を使用できますfromMaybe

fromMaybe :: a -> Maybe a -> a

と組み合わせるとfind、次のようになります。

fromMaybe defaultValue $ find predicate list
于 2012-11-22T18:21:21.840 に答える