我可以用这个来计算积极发生次数:
count :: [Int] -> Int count xs = length [ x | x <- xs, x > 0]
但是,我无法使它既能计算正数又能计算负数。对于输入[1,2,3, -1,-2],我想将(3,2)作为输出。如何实现这一点?
[1,2,3, -1,-2]
(3,2)
bkhjykvo1#
你可以使用一个“fold”。这里你传递一个2元组作为“accumulator”,你递增两个中的一个,这取决于项是正还是负。因此,这看起来像:
import Data.Foldable(foldl') count_pn :: (Num a, Ord a) => [a] -> (Int, Int) count_pn = foldl' f (0, 0) where f (np, nn) x | … = … | otherwise = …
这里你仍然需要实现f函数,这里(np, nn)是一个二元组,其中包含了到目前为止计算的正项和负项的数量,x是我们接下来要计算的元素。
f
(np, nn)
x
1条答案
按热度按时间bkhjykvo1#
你可以使用一个“fold”。这里你传递一个2元组作为“accumulator”,你递增两个中的一个,这取决于项是正还是负。
因此,这看起来像:
这里你仍然需要实现
f
函数,这里(np, nn)
是一个二元组,其中包含了到目前为止计算的正项和负项的数量,x
是我们接下来要计算的元素。