我的第一个Haskell程序,我不明白什么是错的

时间:2012-10-13 23:12:02

标签: haskell functional-programming

我正在尝试递归地实现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概念。

帮助?

Thisthis对我没有帮助。

2 个答案:

答案 0 :(得分:10)

子句True : member (n xs)member声明的返回类型Bool不匹配。如果您在使用x的{​​{1}}中找到xs,那么您只想返回x == n

否则,您应该使用较小的列表True递归member(即再次检查xs与下一个元素的相等性)。以下是您修改这两个问题的代码:

n

答案 1 :(得分:4)

  • 如果您找到了该元素,则答案为True。你似乎试图在那里创建一个列表,不知道为什么......
  • 如果你还没找到,请递归并检查尾巴......