Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala过滤器2套_Scala_Functional Programming - Fatal编程技术网

scala过滤器2套

scala过滤器2套,scala,functional-programming,Scala,Functional Programming,我有这个密码。 我不明白“filter”函数是如何有效的。 首先,它使用了intersect,但第二个参数p是一种方法,而不是设置为intersect功能原型需求。 其次,intersect(s,p)如何作为过滤器工作 谢谢这是看待同一事物的两种不同方式。正如我在中提到的,将集合表示为它们的指示符函数会使很多事情更加方便,其中之一就是过滤 通常,当我们有一个类型为a的集合时,我们可以使用谓词函数a=>Boolean来过滤它,该函数告诉我们是否要保留每个元素。在本例中,谓词函数的类型与我们用来表示

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


谢谢

这是看待同一事物的两种不同方式。正如我在中提到的,将集合表示为它们的指示符函数会使很多事情更加方便,其中之一就是过滤

通常,当我们有一个类型为
a
的集合时,我们可以使用谓词函数
a=>Boolean
来过滤它,该函数告诉我们是否要保留每个元素。在本例中,谓词函数的类型与我们用来表示集合的类型相同,过滤与取两个集合的交集是一样的


要解决第二个问题:
intersect
需要返回一个函数,如果项同时位于set
s
和set
t
false
中,则该函数将返回
true
。我们可以检查是否使用
对每个应用
方法(或者在本例中为其语法糖)。然后,实现是一个简单的函数literal
(x=>s(x)和&t(x))
,它接受一个参数
x
,当且仅当
x
在两个集合中时返回
true

我很确定它不是一个集合,而是一个函数表示,它是一个类型别名
type Set=Int=>Boolean
;这意味着您可以使用
p
,因为它统一为同一类型。
  def intersect(s: Set, t: Set): Set = (x => s(x) && t(x))


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