lit*_*tos 0 haskell list abstract-data-type
我正在练习明天练习考试.该文本告诉我将数据库实现到库中,以定义Item可以是书籍或杂志的s.对于每本书,我保存了姓名+作者.每个Magazine我保存的名称:
data Item = Book String String
| Magazine String
deriving(Show)
data Requisition = Req String Item
type Database = [Requisition]
exDB :: Database
exDB = [Req "John" (Book "PF" "HS"),Req "Jay"(Book "Apple" "Steve Jobs"),Req "Francis"(Magazine "Forbes")]
books :: Database -> String -> [Item]
books db name = {-- what's next?-}
Run Code Online (Sandbox Code Playgroud)
现在,我需要创建一个名为的函数books :: Database -> String -> [Item],它在我的数据库中按名称搜索并向我提供该人请求的书籍.
我该怎么做呢?
使用该filter函数这非常简单:
filter :: (a -> Bool) -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)
它需要一个条件来应用于列表的每个元素,然后返回满足该条件的所有元素的列表.在您的情况下,您想要查找特定人员所要求的书籍.您可以将其分解为两个问题:
Requisition列表中的所有书籍我们说要解决第一个问题
requestsFromPerson :: Database -> String -> Database
requestsFromPerson db name = filter matchesName db
where
matchesName (Req name' item) = name == name'
Run Code Online (Sandbox Code Playgroud)
第二步也可以用filter,但我会让你填写实现
onlyBooks :: Database -> Database
onlyBooks db = filter ??? db
Run Code Online (Sandbox Code Playgroud)
然后你可以结合这两个:
books db name = onlyBooks (requestsFromPerson db name)
Run Code Online (Sandbox Code Playgroud)
所以你所要做的就是填写???for onlyBooks,这应该工作!提示:模式匹配是你的朋友.