基本上我想编写一个函数,它将一个列表作为输入,将一个排序算法列表应用于该列表,然后返回一个布尔值,指示它们是否都产生了一个排序列表。
(checksorted
是我编写的一个函数,它接受一个列表并返回一个布尔值,指示它是否已排序)
这是我开始使用的代码:
sortCheck :: Ord a => [a] -> Bool
sortCheck xs = checkSorted(mergeSort xs) && checkSorted(insertionSort xs) && checkSorted(qSort xs)
当我尝试编译它时,我得到某种类型错误:
could not deduce (a ~ Int)
我怎么能使用无限列表来做到这一点?
编辑:这是我的校验算法
checkSorted :: Ord a => [a] -> Bool
checkSorted [] = True
checkSorted [x] = True
checkSorted (x:y:xs) = x <= y && checkSorted (y:xs)
答案 0 :(得分:1)
checksorted
,mergesort
,insertionSort
或qsort
中至少有一个必须使用[Int]
类型来获取该错误。
错误消息告诉您,您指定sortCheck
应该适用于任何类型的列表,只要该类型具有Ord
实例,但是来自正文的推断类型需要Int
列表。
~
是类型相等约束。(a ~ Int)
可以读作&#34; a
等于Int
&#34;。