我正在编写一个函数来检查树是否是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] 类型不匹配。

10-06 09:38