Haskell 返回具有指定字段值的记录的记录语法
Haskell record syntax returning a record with specified field value
我是 Haskell 和 Whosebug 的新手。我有 'database' 本书。我正在尝试 return 指定书籍的粉丝列表。
type Title = String
type Author = String
type Year = Int
type Fan = String
data Book = Book { bookTitle :: Title
, bookAuthor:: Author
, bookYear :: Year
, bookFans :: [Fan]
}
deriving (Show)
type Database = [Book]
bookDatabase :: Database
bookDatabase = [Book "Harry Potter" "JK Rowling" 1997 ["Sarah","Dave"]]
我不知道该怎么做。我试过使用过滤功能。我想要以下行为。
fansOfBook :: Title -> Database -> [Fan]
fansOfBook "Harry Potter"
["Sarah","Dave"]
您需要做的是对您的 Database
:
进行 filter
操作
filter (\x -> (bookTitle x) == title) db
其中 db
是 Database
类型,title
是您作为输入提供的 Title
类型。
这将为您提供所有 [Book]
具有该特定标题的列表。现在您必须使用 map
函数从中提取 Fan
。但请注意,这将为您提供 [[Fan]]
类型,因为您可以拥有多个具有相同标题的条目。因此,您必须应用 concat
才能将它们设为 [Fan]
。函数 concat
会将列表的列表连接成一个列表。
我是 Haskell 和 Whosebug 的新手。我有 'database' 本书。我正在尝试 return 指定书籍的粉丝列表。
type Title = String
type Author = String
type Year = Int
type Fan = String
data Book = Book { bookTitle :: Title
, bookAuthor:: Author
, bookYear :: Year
, bookFans :: [Fan]
}
deriving (Show)
type Database = [Book]
bookDatabase :: Database
bookDatabase = [Book "Harry Potter" "JK Rowling" 1997 ["Sarah","Dave"]]
我不知道该怎么做。我试过使用过滤功能。我想要以下行为。
fansOfBook :: Title -> Database -> [Fan]
fansOfBook "Harry Potter"
["Sarah","Dave"]
您需要做的是对您的 Database
:
filter
操作
filter (\x -> (bookTitle x) == title) db
其中 db
是 Database
类型,title
是您作为输入提供的 Title
类型。
这将为您提供所有 [Book]
具有该特定标题的列表。现在您必须使用 map
函数从中提取 Fan
。但请注意,这将为您提供 [[Fan]]
类型,因为您可以拥有多个具有相同标题的条目。因此,您必须应用 concat
才能将它们设为 [Fan]
。函数 concat
会将列表的列表连接成一个列表。