Haskell中的这个功能是做什么的?
我不明白递归的工作方式
f[]=[]
f(x:xs)=x: [y|y <- f xs, x/=y]
答案 0 :(得分:6)
f[]=[]
f(x:xs) = x : [y|y <- f xs, x/=y]
此功能可从列表中删除重复项。以下是它的工作原理:
x
,并假设(归纳假设)f xs
给你列表没有重复。现在,您唯一要做的就是确保不再插入x
。因此,列表压缩意味着:获取所有其余元素(通过归纳假设是唯一的),但删除x
。现在感觉如何吗?
PS。你也可以写第二个条款:
f(x:xs) = x : filter (/= x) (f xs)
答案 1 :(得分:1)
在我看来,它消除了列表中的任何重复条目。
以下是它的工作原理:
f[] = []
表示当输入为空列表时,输出将为空列表
然后,f(x:xs) = x: [y|y <- f xs, x/=y]
使用称为列表理解的内容。它接受输入列表的头部,然后附加列表理解。
列表理解如下所示:&#34; y使得y在f(xs)中,并且y不等于x&#34;
所以f(xs)中的元素列表不等于head元素。