如何计算haskell中另一个列表中列表元素的数量

时间:2017-11-15 01:14:06

标签: haskell

我一直在尝试计算列表中元素的数量,这些元素也来自另一个列表。

ys是原始列表,ele是元素列表。

所以count 6 [1,2,3] = 3因为它会计算“0..5

的元素

我的想法是将ele函数实现到count函数中以完成此操作,但我不知道如何做到这一点。

我试图在下面的代码中将ele n插入“(filter (== ele n) ys)”:

count :: Eq a => a -> [a] -> Int
count n ys = length (filter (== n) ys)

ele n = [ n | n <- [0..n-1]]

但显然它没有用,上面的代码是我到目前为止的代码

1 个答案:

答案 0 :(得分:0)

如果我理解你正在尝试做什么,你可以试试这个

count n ys = length (filter (flip elem (ele n)) ys)

请注意,为了按(== ele n)过滤列表,您必须有一个数字列表列表,因为将根据数字列表{{1}检查列表中的每个元素是否相等}。如果您想检查ele n的每个元素是否在ys中,您应该使用elem函数而不是ele n

因为==将元素作为其第一个参数而列表作为其第二个参数,所以您可以使用flip函数来设置过滤器函数。 elem接受两个参数的函数,并返回一个函数,该函数执行相同的操作但以相反的顺序获取其参数。例如,而不是写

flip

你可以写

elem 3 [1..5]

另一种解决方案是使用Data.List中的intersect,在这种情况下,您根本不必使用过滤器。

flip elem [1..5] 3