scala过滤器2套

时间:2014-09-22 12:44:11

标签: scala functional-programming

  def intersect(s: Set, t: Set): Set = (x => s(x) && t(x))


  def filter(s: Set, p: Int => Boolean): Set  = intersect(s, p)

我有这个代码。 我不明白“filter”功能如何成为有效功能。 首先,它使用intersect,但第二个参数p是一个方法,而不是一个Set intersect函数原型需求。 其次,intersect(s, p)如何作为过滤器工作?

感谢

1 个答案:

答案 0 :(得分:2)

这是看待同一事物的两种不同方式。正如我在my previous answer中提到的,将集合表示为指标函数会使许多事情变得更加方便,其中一个就是过滤。

通常当我们有某个类型A的集合时,我们可以使用谓词函数A => Boolean来过滤它,告诉我们是否要保留每个元素。在这种情况下,谓词函数的类型与我们用于表示集合的类型相同,并且过滤与两个集合的交集相同。

要解决您的第二个问题:intersect需要返回一个函数,如果该项目同时设置true并设置s和{{1},则该函数将返回t }} 除此以外。我们可以检查每个(或者在这种情况下是它的语法糖)使用false方法。然后,实现是一个简单的函数文字apply,它接受​​参数(x => s(x) && t(x))并且当且仅当x在两个集合中时才返回true