Haskell 返回标题列表
定义一个类型LibraryItem,它表示库借出到的项 顾客:期刊或书籍。期刊有目录号、标题和出版频率。发布频率为若干天 或者几个月。书有目录号, 标题和作者。如果只有一本书或期刊,请返回其标题和目录号。给出书刊清单,返回书名和目录号清单Haskell 返回标题列表,haskell,Haskell,定义一个类型LibraryItem,它表示库借出到的项 顾客:期刊或书籍。期刊有目录号、标题和出版频率。发布频率为若干天 或者几个月。书有目录号, 标题和作者。如果只有一本书或期刊,请返回其标题和目录号。给出书刊清单,返回书名和目录号清单 data Libraryitem = Book {cataloguenumber1 :: Int , title1 :: String , author :: String}| Periodical {cataloguenumber2 :: Int, titl
data Libraryitem = Book {cataloguenumber1 :: Int , title1 :: String , author :: String}| Periodical {cataloguenumber2 :: Int, title2 ::String , publicationfrequency :: Publicationfrequency} deriving (Show,Eq,Ord)
data Publicationfrequency = NumberofDays Int | NumberofMonths Int deriving (Show,Eq,Ord)
当给出书籍/期刊详细信息时,返回标题时,下面的代码起作用
titleR (Book _ titleR _ ) = titleR
titleR (Periodical _ titleR _ ) = titleR
我有两个问题
1) 使用我在定义数据类型时所做的标题1作业,是否有其他方法返回一本书的标题和目录号
2) 如何使用递归并对项目列表执行此操作
下面是我对递归的尝试
titlen1 [] = []
titlen1 (x:xs) = if x == (Book _ title1 _)
then title1 : title1 xs
尽管如此,我还是更喜欢使用我在定义中使用的标题1。我还意识到,此代码不足以执行此任务。您似乎误解了模式匹配的工作原理。查看更多关于Haskell中模式匹配工作原理的信息 1) 是否有其他方式返回标题和目录号 在一本书中,使用了我在定义我的 数据类型 是的,您可以,但是退货类型会有所不同。最简单的方法是返回一个元组
titleR' :: LibraryItem -> (String, Int)
titleR' (Book catNumber titleR _) = (titleR, catNumber)
titleR' (Periodical catNumber titleR _) = (titleR, catNumber)
2) 如何使用递归并对项目列表执行此操作
下面是使用普通递归的解决方案
titles :: [LibraryItem] -> [String]
titles [] = []
titles ((Book _ t _):xs) = t : titles xs
titles ((Periodical _ t _):xs) = t : titles xs
或者您可以使用map函数(重用以前的titleR'
函数)
似乎您误解了模式匹配的工作原理。查看更多关于Haskell中模式匹配工作原理的信息 1) 是否有其他方式返回标题和目录号 在一本书中,使用了我在定义我的 数据类型 是的,您可以,但是退货类型会有所不同。最简单的方法是返回一个元组
titleR' :: LibraryItem -> (String, Int)
titleR' (Book catNumber titleR _) = (titleR, catNumber)
titleR' (Periodical catNumber titleR _) = (titleR, catNumber)
2) 如何使用递归并对项目列表执行此操作
下面是使用普通递归的解决方案
titles :: [LibraryItem] -> [String]
titles [] = []
titles ((Book _ t _):xs) = t : titles xs
titles ((Periodical _ t _):xs) = t : titles xs
或者您可以使用map函数(重用以前的titleR'
函数)