Haskell中的运行时错误
我的程序是在元组列表中搜索我写的如下Haskell中的运行时错误,haskell,tuples,runtime-error,Haskell,Tuples,Runtime Error,我的程序是在元组列表中搜索我写的如下 import List data BookInfo = Book Int String [String] deriving(Show) enter :: Int->String->[String]->BookInfo enter id name subject=Book id name subject bookId (Book id _ _ ) = id index :: BookInfo -> Int inde
import List
data BookInfo = Book Int String [String]
deriving(Show)
enter :: Int->String->[String]->BookInfo
enter id name subject=Book id name subject
bookId (Book id _ _ ) = id
index :: BookInfo -> Int
index (Book id name subject) = bookId (Book id name subject)
arrayentering ::BookInfo->[BookInfo]->[BookInfo]
arrayentering (Book id name subject) [] =[(Book id name subject)]
arrayentering (Book _ " " [" "]) [] =[]
arrayentering (Book id name subject) [(Book it namr suject)]=
(Book id name subject):[(Book it name suject)]
toList::[BookInfo]->[Int]
toList [(Book id name subject) ]= map index [ (Book id name subject)]
bubbleSort::(Ord t) => [t]->[t]
bubbleSort[x,y,z,xs]=
if x<y then x : [y,z,xs]
else y : [x,z,xs]
superBubble::(Ord t) => [[t]]->[[t]]
superBubble a=map bubbleSort a
combining::[BookInfo]->[[Int]]
combining [(Book id name subject)]=superBubble [toList [(Book id name subject)]]
导入列表
数据BookInfo=Book Int String[String]
派生(显示)
输入::Int->String->[String]->BookInfo
输入id name subject=图书id name subject
簿记id(簿记id)=id
索引::BookInfo->Int
索引(图书id名称主题)=图书id(图书id名称主题)
阵列输入::BookInfo->[BookInfo]->[BookInfo]
阵列输入(图书id名称主题)[]=[(图书id名称主题)]
阵列输入(书本[“”])[]=[]
arrayentering(图书id名称主题)[(图书名称项目)]=
(图书id名称主题):[(图书it名称主题)]
收费表::[BookInfo]->[Int]
toList[(图书id名称主题)]=地图索引[(图书id名称主题)]
气泡排序::(Ord t)=>[t]->[t]
气泡排序[x,y,z,xs]=
如果x[[t]]->[[t]]
superBubble a=贴图气泡排序a
组合::[BookInfo]->[[Int]]
合并[(图书id名称主题)]=超级泡泡[toList[(图书id名称主题)]]
并清除所有语法错误,但在我尝试输入tuple tocombling()
列表后,它会提示我运行时错误
异常:函数Main中没有详尽的模式。组合
这是什么意思
请只给我指示。如果可能,我想自己修复它。函数定义中的模式
combining [(Book id name subject)]=superBubble [toList [(Book id name subject)]]
仅匹配具有一个元素的列表。您在bubbleSort
中遇到了类似的问题,其中
bubbleSort[x,y,z,xs]=
仅匹配正好包含四个元素的列表和其他位置
我还没有弄清楚它是如何工作的,也许是使用了一个变量模式(匹配所有参数)
是否合适
我怀疑
arrayentering ::BookInfo->[BookInfo]->[BookInfo]
arrayentering (Book id name subject) [] =[(Book id name subject)]
arrayentering (Book _ " " [" "]) [] =[]
arrayentering (Book id name subject) [(Book it namr suject)]=
(Book id name subject):[(Book it name suject)]
应该是
arrayentering book bookList
| empty book = bookList
| otherwise = book : bookList
where
empty (Book _ name subject) = all isSpace name && all (all isSpace) subject
(empty
可能错误)
而
toList
可能只是map index
对不起,但是isSpace
的导入文件必须导入数据.Char
。但是你最好不要首先构造无效的Book
s.+1,因为你不想得到给出的答案
arrayentering book bookList
| empty book = bookList
| otherwise = book : bookList
where
empty (Book _ name subject) = all isSpace name && all (all isSpace) subject