我正在尝试递归地实现elem
函数。这就是我写的:
member :: Eq a => a -> [a] -> Bool
member _ [] = False
member n (x:xs)
| n == x = True : member (n xs)
| otherwise = False
main = do
print (member 10 [1,12,11])
我得到的'无法匹配期望类型'Bool'与实际类型'[a0]'错误。
我尝试使用if..else..then也一样,但是徒劳无功。
我想我在这里错过了一个非常基本和基本的Haskell概念。
帮助?
答案 0 :(得分:10)
子句True : member (n xs)
与member
声明的返回类型Bool
不匹配。如果您在使用x
的{{1}}中找到xs
,那么您只想返回x == n
。
否则,您应该使用较小的列表True
递归member
(即再次检查xs
与下一个元素的相等性)。以下是您修改这两个问题的代码:
n
答案 1 :(得分:4)
True
。你似乎试图在那里创建一个列表,不知道为什么......