我一直在尝试计算列表中元素的数量,这些元素也来自另一个列表。
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]]
但显然它没有用,上面的代码是我到目前为止的代码
答案 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