Scala谓词和筛选函数?

Scala谓词和筛选函数?,scala,functional-programming,Scala,Functional Programming,我有一个非常简单的集s1{1,2}的例子,我想对它应用一个谓词p>1。现在我已经实现了这个函数,它给了我正确的结果 def filter(s: Set, p: Int => Boolean): Set = {(i: Int) => s(i) && p(i)} 其中集合的定义是 type Set = Int => Boolean 但是在Scala中有没有更优雅的方法呢?使用本课程对集合的定义,您的答案非常优雅 由于谓词实际上也是一个Set,filter

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

  def filter(s: Set, p: Int => Boolean): Set = {(i: Int) => s(i) && p(i)}
其中集合的定义是

  type Set = Int => Boolean

但是在Scala中有没有更优雅的方法呢?

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

由于谓词实际上也是一个
Set
filter
可以通过重用
intersect
函数变得更加简洁:

/**
*返回两个给定集合的交集,
*同时位于's'和't'中的所有元素的集合。
*/
def intersect(s:集,t:集):集=???
/**
*返回'p'保存的's'子集。
*/
def过滤器(s:Set,p:Int=>Boolean):Set=intersect(s,p)

我省略了intersect实现,因为它阻止共享作业答案。

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

由于谓词实际上也是一个
Set
filter
可以通过重用
intersect
函数变得更加简洁:

/**
*返回两个给定集合的交集,
*同时位于's'和't'中的所有元素的集合。
*/
def intersect(s:集,t:集):集=???
/**
*返回'p'保存的's'子集。
*/
def过滤器(s:Set,p:Int=>Boolean):Set=intersect(s,p)

我省略了intersect实现,因为它阻止共享作业答案。

我想您有很好的理由这样定义
Set
,而不使用标准的Scala集合库?是的,它是Martin Odersky的Coursera课程作业的一部分。@user1343318您可以删除
{}
i
之后的类型注释,因此主体将如下所示:
i=>s(i)和&p(i)
。除此之外,它看起来很好……:)Scala没有内置谓词支持(即布尔逻辑),但编写自己的组合器()或导入库()非常容易。就你的目的而言,你的回答很好。你能更准确地回答这个问题吗。你为什么认为这不优雅?顺便说一下,您可以省去
i
的类型注释,因为它是推断出来的
def filter(s:Set)(p:Int=>Boolean):Set={i=>s(i)&&p(i)}
我想你有理由这样定义
Set
而不使用标准的Scala集合库?是的,它是Martin Odersky的Coursera课程作业的一部分。@user1343318你可以在
i
之后删除
{/code>和类型注释,所以主体看起来是这样的:
i=>s(i)和&p(i)
。除此之外,它看起来很好……:)Scala没有内置谓词支持(即布尔逻辑),但编写自己的组合器()或导入库()非常容易。就你的目的而言,你的回答很好。你能更准确地回答这个问题吗。你为什么认为这不优雅?顺便说一下,您可以省去
i
的类型注释,因为它是推断出来的
def过滤器(s:Set)(p:Int=>Boolean):Set={i=>s(i)和&p(i)}