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)