【问题标题】:What is the problem with my haskell code?我的haskell代码有什么问题?
【发布时间】:2021-12-09 10:23:33
【问题描述】:

实现一些 :: [Bool] -> Bool 函数,它决定条件列表是否具有真实元素。在此任务中,不允许使用 or 函数。

  • 测试:
  • 一些 [succ 'a' / = 'b', 1 + 1 / = 2, 10
  • 一些 [succ 'a' / = 'b', 1 + 1 / = 2, 10> = 20] == False
  • 一些 [] == 错误
some :: [Bool] -> Bool
some [] = False
some (False: _) = False
some (_: False) = False
some _ = True

如何修复我的代码?不知道是什么问题。

【问题讨论】:

    标签: haskell boolean


    【解决方案1】:

    (x:xs) 模式中,x 是列表的第一项,xs 是剩余元素的列表。这样的列表不能False。可能是一个包含 False 值的列表,但不是 Bool

    some看起来像:

    some :: [Bool] -> Bool
    some [] = False
    some (x:xs) = x || some xs

    【讨论】:

      【解决方案2】:
      some :: [Bool] -> Bool
      some [] = False
      some (False:xs) = some xs
      some (True:_) = True
      

      您当前代码的问题是,如果您看到第一个元素是False,就不会进一步递归。当您看到False 时,您必须继续检查列表的其余部分,直到列表用尽或找到True。每当您找到True 时,您都可以提前退出并返回True,因为您不关心其余部分。

      【讨论】:

        猜你喜欢
        • 2011-07-28
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 2010-11-08
        相关资源
        最近更新 更多