Scala Predicates和Filter函数?

时间:2013-10-06 11:51:54

标签: scala functional-programming

我有一个非常简单的集合s1 {1,2}的例子,我想应用谓词p> 1就可以了。现在我已经实现了这个功能,它给了我正确的结果。

  def filter(s: Set, p: Int => Boolean): Set = {(i: Int) => s(i) && p(i)}

set的定义是

  type Set = Int => Boolean

但是在Scala中有更优雅的方式吗?

1 个答案:

答案 0 :(得分:4)

使用本课程对Set的定义,您的答案非常优雅。

由于谓词实际上也是Set,因此重用filter函数可以使intersect简洁得多:

/**
 * Returns the intersection of the two given sets,
 * the set of all elements that are both in `s` and `t`.
 */
def intersect(s: Set, t: Set): Set = ???

/**
 * Returns the subset of `s` for which `p` holds.
 */
def filter(s: Set, p: Int => Boolean): Set = intersect(s, p)

我离开了交叉实现,因为Coursera Honor Code阻止了共享分配答案。