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)
如何作为过滤器工作?
感谢
答案 0 :(得分:2)
这是看待同一事物的两种不同方式。正如我在my previous answer中提到的,将集合表示为指标函数会使许多事情变得更加方便,其中一个就是过滤。
通常当我们有某个类型A
的集合时,我们可以使用谓词函数A => Boolean
来过滤它,告诉我们是否要保留每个元素。在这种情况下,谓词函数的类型与我们用于表示集合的类型相同,并且过滤与两个集合的交集相同。
要解决您的第二个问题:intersect
需要返回一个函数,如果该项目同时设置true
并设置s
和{{1},则该函数将返回t
}} 除此以外。我们可以检查每个(或者在这种情况下是它的语法糖)使用false
方法。然后,实现是一个简单的函数文字apply
,它接受参数(x => s(x) && t(x))
并且当且仅当x
在两个集合中时才返回true
。