我在Haskell上做了一些练习。首先我被要求定义一个函数insert :: Int -> [Int] -> [Int]
,以便insert x xs
将x插入到列表xs中,使x大于那些x
它之前的元素和小于或等于的元素
跟着它:
insert :: Int -> [Int] -> [Int]
insert x [] = [x]
insert x (y:ys) = if x < y
then x:y:ys
else y : insert x ys
现在我需要使用插入来定义函数insertionSort :: [Int] -> [Int]
。这是我的尝试:
insertionSort :: [Int] -> [Int]
insertionSort [x] = [x]
insertionSort (x:xs) = insert x insertionSort xs
错误:无法将预期类型[Int]与实际类型[Int]匹配 - &gt; [INT]
任何人都知道如何解决这个问题?非常感谢任何见解,谢谢。
答案 0 :(得分:9)
insert x insertionSort xs
使用三个参数(insert
,x
,insertionSort
)调用xs
。
可能你想要
insert x (insertionSort xs)
答案 1 :(得分:8)
在自己学习一些排序算法的同时,我想为您的解决方案提供一些建议/改进:
insertionSort [] = []
Ord
超过固定类型的实例x
这将导致:
insertionSort :: Ord a => [a] -> [a]
insertionSort [] = []
insertionSort [x] = [x]
insertionSort (x:xs) = insert $ insertionSort xs
where insert [] = [x]
insert (y:ys)
| x < y = x : y : ys
| otherwise = y : insert ys