【问题标题】:Haskell recursion oddHaskell递归奇数
【发布时间】:2014-12-06 20:58:29
【问题描述】:

我必须定义自己的谓词函数,递归搜索数字列表,如果找到奇数则返回True,否则返回False

我已经为需要显示的测试数据设置了X = [1..100]。但是,我有点不确定如何递归搜索列表。我不是在寻找明确的答案,而是在寻找关于递归如何在列表中搜索的解释。

【问题讨论】:

  • 你想把[1,2,3,4] 之类的东西变成[True,False,True,False]吗?
  • 我想要的是,如果列表中的任何数字是奇数,则响应为真,如果没有奇数,则返回 False,如果列表为空,则应为错误
  • 所以f [] == False, f [1, 2] == True, f [2, 4] == False?
  • 所以你想要any odd
  • @Harry 如果您对得到的答案感到满意,请考虑通过单击投票计数下方的标记将其标记为“已接受”。

标签: list haskell


【解决方案1】:

你想要的是函数any odd

any :: (a -> Bool) -> [a] -> Bool

Odd :: Integral a => a -> Bool

any odd :: Integral a => [a] -> Bool

anyOdd :: Integral a => [a] -> Bool
anyOdd = any odd

如果您想自己定义anyOdd 函数,那么您将不得不使用递归:

anyOdd :: Integral a => [a] -> Bool
anyOdd []       = undefined
anyOdd (x:xs)
    | odd x     = undefined
    | otherwise = undefined

您需要将undefined 替换为您的实际逻辑。

【讨论】:

  • 如何用灰色背景显示我的代码?就像你已经这样做了
  • 仍然做不到,无论如何我使用了你提供的代码,并用 anyoddp [] = False 和 anyOdd (x:xs) = True 填充了逻辑部分但是这不会返回正确。我写出 anyoddp (x:xs) = -> 奇数然后为真,它给了我输入时解析错误的错误 ->
  • 我更新了我的答案。将undefined 替换为您认为正确的内容。
  • 最后我得到了你所拥有的,但我得到了一个奇怪的地方。感谢您的帮助
  • 当我在测试数据中输入十进制数字时,它返回 No instance for (Integral Double) from a use of the 'anyoddp' 在表达式中:anyoddp e 在“it”的等式中: it = anyoddp e
猜你喜欢
  • 2015-04-10
  • 2011-02-14
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
相关资源
最近更新 更多