Haskell 了解函数的作用

Haskell 了解函数的作用,haskell,Haskell,我知道(\\)=foldl(翻转删除)这是标准函数 c a = (a\\).(a\\) 我想知道谁可以知道c函数的功能。 我该怎么办? 如果我只关注(a\\) delete获取一个列表和一个我们要从列表中删除的x。 (a\\)已经有一个列表a,所以我们需要发送一个要删除的值xa=[a1、a2、a3] delete x [] = [] delete x (y:ys) = if x == y then ys else y : delete x ys 其中f是flip delete 所以我们从a

我知道
(\\)=foldl(翻转删除)
这是标准函数

c a = (a\\).(a\\)
我想知道谁可以知道
c
函数的功能。 我该怎么办? 如果我只关注
(a\\)
delete获取一个列表和一个我们要从列表中删除的x。
(a\\)
已经有一个列表a,所以我们需要发送一个要删除的值x<代码>a=[a1、a2、a3]

delete x [] = []
delete x (y:ys) = if x == y then ys else y : delete x ys 
其中
f
flip delete

所以我们从a的第一个元素中删除x,从结果列表中删除子列表a2和a3。 因此,我们将获得a1唯一的所有值。它似乎是一个列表。
不知道这是否正确。

当在具有唯一元素的列表上使用时,
(as\\bs)
类似于集合差异,即
as
的集合也不是
bs
。因此

foldl => (a1 'f' x) 'f' a2) 'f' a3  

因此,它将
集合计算为
集合,也就是
bs
,因此是交叉点。

是的,我在尝试运行函数时也注意到了这一点,但我想知道,如果不在pc上进行测试,我如何得出这一结论。这是一个旧的考试题。为什么它以两个列表作为参数,我是指函数c。应该是c xs吗?y delete接受一个列表和一个值(在本例中为y)。当您知道(\)的类型时,这一点都不难。如果不是,您需要在心里翻转delete并知道foldl的类型-然后您意识到“累加器”是一个列表(实际上是delete的第二个参数),但是由于foldl在一个列表上运行,所以另一个参数也必须是一个列表,并且元素类型是相等的(例如,由于使用==)。您可以看到\\的类型是
[a]>[a]->[a]
@Ingo在代码周围加上两个反勾:
(((as`without`a)` without`b)` without`c)
)@用户2975699否,
foldl(+)0[1,2,3]=((0+1)+2)+3)
。写
-
翻转删除
,然后
foldl(-)[1,2,3][1,2,4]=([1,2,3]-1)-2)-4=([2,3]-2)-4=[3]-4=[3]
。总是从类型开始:)
前奏数据。列表>:不要让c中的c a=(a\\\\\)(a\\)=(a\)=>
。因此它被称为
cxsys
,其中
xs
ys
都是相同类型的列表。。。
c as bs = as \\ (as \\ bs)