这个函数在Haskell中做了什么?

时间:2014-06-21 16:19:51

标签: haskell

Haskell中的这个功能是做什么的?

我不明白递归的工作方式

 f[]=[]
 f(x:xs)=x: [y|y <- f xs, x/=y]

2 个答案:

答案 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元素。