我正在编写一个函数来检查树是否是BST。我所尝试的只是按顺序遍历到列表中打印树,然后检查列表是否在增加。但是我有这个错误:
Couldn't match expected type `a' against inferred type `[t]'
`a' is a rigid type variable bound by
the type signature for `checkList' at BST.hs:24:18
In the pattern: x : y : xs
In the pattern: [x : y : xs]
In the definition of `checkList':
checkList [x : y : xs] = x <= y && checkList (y : xs)
这是我到目前为止所拥有的(只有一个 checkList 函数)。
checkList :: (Ord a) => [a] -> Bool
checkList [] = True
checkList [x] = True
checkList [x:y:xs] = x <= y && checkList (y:xs)
最佳答案
你要:
checkList :: (Ord a) => [a] -> Bool
checkList [] = True
checkList [x] = True
checkList (x:y:xs) = x <= y && checkList (y:xs)
当您尝试在最终模式中使用
[ ]
时,您说的是“匹配包含 x:y:xs
(也是一个列表!)作为其唯一元素的列表”。与 [a]
类型不匹配。