【问题标题】:Counting even number haskell with list comprehension?用列表理解计算偶数haskell?
【发布时间】:2014-11-03 10:49:48
【问题描述】:

我实现了一个可以计算数字列表并在列表中产生多少个偶数的函数,我使用递归实现了,但这次我需要列表理解。 我确实尝试过使用列表理解,但是一旦我执行了这个函数,它就会挂起,它什么也没给我。这是我的代码:

countEven :: (Integral t, Num a) => [t] -> a
countEven [] = 0
countEven  (x:xs)
    | ev == True    = 1 + (countEven xs )
    | otherwise     = countEven xs
    where ev    = even x

这是我使用列表理解的尝试:

evenList :: (Integral t, Num a) => [t] -> a
evenList xs =  countEven [x | x <- [1..]]

【问题讨论】:

  • 我确实在这个网站上搜索过,我只找到了相同的递归函数,但没有列表理解实现。
  • [1..] 包含无限个偶数 - 这就是 countEven 挂起的原因。
  • 你是对的,我的错:(我只是想出来我是 Haskell 的一个新人,有什么想法可以代替吗?我试图输入 [1..n] 但它不起作用?
  • 您的countEven 函数看起来不错。你想让evenList 函数做什么?
  • 永远不要使用x == True,只使用x

标签: list haskell list-comprehension


【解决方案1】:

列表推导式可用于生成其他列表,但不能用于计数。因此,您需要将列表理解与其他内容结合起来,例如

countEvens :: [Int] -> Int
countEvens l = length [ x | x <- l, even x ]

在这里,列表推导式只生成一个包含所有偶数的子列表,length 完成了这项工作。

【讨论】:

  • 谢谢它这么简单,但我不知道为什么我把它弄复杂了哈哈
猜你喜欢
  • 1970-01-01
  • 2014-05-28
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多