make函数返回数据结构的标题

时间:2011-09-26 08:28:17

标签: haskell

有几种数据类型。

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是否正确?

2 个答案:

答案 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

我将把剩余功能的实现留给你。