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

如何从haskell中的另一个列表中计算列表的元素数,haskell,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)

我一直试图从一个列表中计算元素的数量,而这些元素也来自另一个列表

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]]
count::Eq a=>a->[a]->Int
计数n ys=长度(过滤器(=n)ys)

ele n=[n | n如果我正确理解您的意图,您可以试试这个

count n ys = length (filter (flip elem (ele n)) ys)
请注意,为了通过
(==ele n)过滤列表
,您必须有一个数字列表,因为列表中的每个元素都将被检查是否与数字列表中的
ele n
相等。如果您想检查
ys
的每个元素是否在
ele n
中,您应该使用该函数而不是
=

由于
elem
将元素作为其第一个参数,将列表作为其第二个参数,因此您可以使用该函数设置筛选函数。
flip
接受两个参数的函数,并返回一个执行相同操作但以相反顺序接受其参数的函数。例如,不是编写

elem 3 [1..5]
你可以写

flip elem [1..5] 3
另一种解决方案是使用from Data.List,在这种情况下,您根本不需要使用过滤器

import Data.List
count n ys = length (intersect ys (ele n))

“it's not work”(它不起作用)后面应该始终跟着一条错误消息。@ThomasM.DuBuisson很抱歉我没有提到错误消息,它在表达式中说:'没有由文字'1'引起的(Num[Integer])实例。'。在'count'的第二个参数中为1,即表达式中的'[1,2,3]':count 6[1,2,3]`如果我把elen放入filter(=elen)供参考,你不需要理解
elen
。这与
elen=[0..n-1]
是一样的
翻转elem(elen)
可以写
(`elem`(elen))
,可以说它更可读。