Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 返回标题列表_Haskell - Fatal编程技术网

Haskell 返回标题列表

Haskell 返回标题列表,haskell,Haskell,定义一个类型LibraryItem,它表示库借出到的项 顾客:期刊或书籍。期刊有目录号、标题和出版频率。发布频率为若干天 或者几个月。书有目录号, 标题和作者。如果只有一本书或期刊,请返回其标题和目录号。给出书刊清单,返回书名和目录号清单 data Libraryitem = Book {cataloguenumber1 :: Int , title1 :: String , author :: String}| Periodical {cataloguenumber2 :: Int, titl

定义一个类型LibraryItem,它表示库借出到的项 顾客:期刊或书籍。期刊有目录号、标题和出版频率。发布频率为若干天 或者几个月。书有目录号, 标题和作者。如果只有一本书或期刊,请返回其标题和目录号。给出书刊清单,返回书名和目录号清单

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'
函数)