Haskell比较排序算法

时间:2017-11-08 14:41:46

标签: sorting haskell iteration

基本上我想编写一个函数,它将一个列表作为输入,将一个排序算法列表应用于该列表,然后返回一个布尔值,指示它们是否都产生了一个排序列表。

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)

1 个答案:

答案 0 :(得分:1)

checksortedmergesortinsertionSortqsort中至少有一个必须使用[Int]类型来获取该错误。

错误消息告诉您,您指定sortCheck应该适用于任何类型的列表,只要该类型具有Ord实例,但是来自正文的推断类型需要Int列表。

~是类型相等约束。(a ~ Int)可以读作&#34; a等于Int&#34;。