我有一个非常简单的集合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中有更优雅的方式吗?
答案 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阻止了共享分配答案。