【问题标题】:My first Haskell program and I don't understand what's wrong我的第一个 Haskell 程序,我不明白出了什么问题
【发布时间】:2018-05-20 01:04:52
【问题描述】:

我正在尝试递归实现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 没有帮助我。

【问题讨论】:

    标签: haskell functional-programming


    【解决方案1】:

    子句True : member (n xs)member 声明的返回类型Bool 不匹配。如果您在xs 中找到xx == n,那么您只需返回True

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

    member n (x:xs) | n == x    = True
                    | otherwise = member n xs
    

    【讨论】:

    • 或者,使用member n (x:xs) = n == x || member n xs
    【解决方案2】:
    • 如果你找到了元素,答案是True。您似乎正在尝试在那里创建一个列表,不知道为什么...
    • 如果没有找到,递归并检查尾部...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多