我想从列表中筛选number,条件是它们必须小于3然后是像这样的元素在起始列表中有多少
filterLove :: (Num a, Ord a) => [a] -> Int
filterLove [42, 66, 15, 2] ~>* 1
我试过这个filterLove filter (< 3) a = length a
,但它不起作用。我不知道该怎么做。谢谢你的帮助。
filterLove
是一个映射项目列表的函数,因此这意味着您将其定义为:
filterLove :: (Num a, Ord a) => [a] -> Int
filterLovexs= …
其中xs
为数字列表,…
部分为以Int
为类型的表达式。
xs
中小于3的元素的新列表,filter (<3) xs
中filter :: (a -> Bool) -> [a] -> [a]
接受一个谓词和一个列表,并生成一个包含满足该谓词的所有元素的列表。然后我们可以用length (filter (<3) xs)
wherelength :: [a] -> Int
来确定该列表的长度将决定列表的长度:
filterLove :: (Num a, Ord a) => [a] -> Int
filterLove xs =length(filter(<3) xs)
我们可以用η-reduction去除了参数xs
:
filterLove :: (Num a, Ord a) => [a] -> Int
filterLove = length . filter (<3)