有几种数据类型。
data Book =BName| Author deriving (Eq,Show)
data Video = VName deriving (Eq,Show)
data CD =Cname | Auth | NOC deriving (Eq,Show)
data Product = Product Book Video CD deriving (Eq,Show)
make function getTitle返回结构名称(BName,CName或VName)。 例如 getTitle(Book“name”noname“) - >”name“ getTitle(视频“名称”) - > “名称” 等等。
有可能吗?
存在数据类型Book with field title and author,Videocassete with field author,CDdisk with fields title,composition of composition and author。 1)创建数据类型可以引入此数据类型的Product 2)使函数getTitle返回标题。 3)使函数getTitles返回产品列表中的所有标题(使用函数getTtitle) 4)制作函数bookAuthors,在产品列表中返回书籍作者 5)make function lookupTitle :: String-> [Product] - >也许Product返回带有输入名称的产品 6)make function lookupTitles :: [String] - > [Product] - > [Product]输入params是名称列表和产品列表,并且每个名称都从产品列表中获取产品。忽略第一个列表中的名称,而不是第二个列表中的产品。使用函数lookipTitle。
这就是全部任务。
data Book = Book String String deriving(Eq,Show)
data Video = Video String deriving(Eq,Show)
data CDisk = CDisk String String Int deriving(Eq,Show)
--titles
class Titleable a where
getTitle :: a ->String
instance Titleable Book where
getTitle (Book title _) = title
instance Titleable Video where
getTitle (Video title) = title
instance Titleable CDisk where
getTitle(CDisk title _ _) = title
--get titles
getTitles (x:xs) = [ getTitle x | x<-xs ]
lookupTitle _ [] =Nothing
lookupTitle::String->[Product]->Maybe Product
lookupTitle a (x:xs) | getTitle x==a =Just x
| otherwise = lookupTitle a (x:xs)
lookupTitles::[String]->[Product]->[Product]
lookupTitles (x:xs) (y:ys) = [y|x<-xs,y<-ys,x==lookupTitle y]
但 1)我不知道如何制作函数bookAuthors(函数怎么能找到参数是book-type?) 2)如何制作产品类型?我的意思是它是Book或Video或CDisk 3)lookupTitle和lookupTitle是否正确?
答案 0 :(得分:11)
您确定需要这样的数据类型吗?
data Book = BName | Author deriving (Eq,Show)
表示书籍是BName(书名?)还是作者?
我怀疑你想要类似于
的东西data Book = Book BName Author
e.g。一本书有书名和作者
如果你想捕捉“可标题”事物的本质,你可以使用类型类。
class Titleable a where
getTitle :: a -> String
instance Titleable Book where
getTitle (Book title _) = title
为您的其他类型编写实例。
答案 1 :(得分:0)
从任务描述中,它听起来像他们正在寻找的数据类型是这样的:
type Title = String
type Author = String
data Product = Book Title Author
| Video Title
| CD Title Integer Author
deriving (Eq, Show)
然后可以使用模式匹配来实现函数getTitle
。
getTitle (Book title _) = title
getTitle (Video title) = title
getTitle (CD title _ _) = title
我将把剩余功能的实现留给你。