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

mad*_*ode 3 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])
Run Code Online (Sandbox Code Playgroud)

我得到了'无法匹配预期类型'Bool'与实际类型'[a0]'错误.

我尝试使用if..else..then也一样,但是徒劳无功.

我想我在这里错过了一个非常基本和基本的Haskell概念.

救命?

对我没有帮助.

Jon*_*ier 10

该子句True : member (n xs)member声明的返回类型不匹配Bool.如果发现xxs使用x == n,那么你要简单地返回True.

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

member n (x:xs) | n == x    = True
                | otherwise = member n xs
Run Code Online (Sandbox Code Playgroud)