首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换set - Scala Coursera练习

转换set - Scala Coursera练习
EN

Stack Overflow用户
提问于 2017-08-02 23:36:29
回答 1查看 241关注 0票数 1

我正在编写Coursera的Scala教程。其中一个练习要求实现一个映射函数来设置如下定义的类型:type Set = Int => Boolean。函数有一个存根:

代码语言:javascript
复制
/**
* Returns a set transformed by applying `f` to each element of `s`.
*/
def map(s: Set, f: Int => Int): Set = ???

我认为可以通过执行以下操作来检查元素是否在s中:(x: Int) => s(x)。我认为这应该等同于集合的任何定义。因此,如果我们想在集合上应用转换,我们可以这样做:(x: Int) => s(f(x))。所以函数的定义是:def map(s: Set, f: Int => Int): Set = s(f(x))。但如果我试一下,这会给我带来一些奇怪的设置:

代码语言:javascript
复制
def map(s: Set, f: Int => Int): Set = (x: Int) => s(f(x))
  def toStringH(s: Set): String = {
    val xs = for (i <- -bound to bound if contains(s, i)) yield i
    xs.mkString("{", ",", "}")
  }
def printSet(s: Set) { println(toStringH(s)) }
val squaredSet = map((x: Int) => (x> -3 & x<3), (x:Int) => (x+1))
printSet(squaredSet)

所以我想知道我哪里错了。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-08-02 23:59:46

我想您指的是Martin Odersky的progfun1课程及其第二周的任务。我认为这个问题通常没有解决方案(它需要为给定的函数找到一个逆函数,我怀疑这是真的可能的),课程作者也知道这一点。因此,他们添加了一个您可能遗漏的额外限制(我强调了重要的部分):

请注意,没有直接的方法来查找集合中的哪些元素。contains只允许知道给定的元素是否包含在内。因此,如果我们希望对一个集合的所有元素做一些事情,那么我们必须迭代所有的整数,每次测试它是否包括在集合中,如果是,就用它做一些事情。这里,我们考虑整数x具有-1000 <= x <= 1000属性,以限制搜索空间。

尽管它是对forall任务的注释,但它位于同一部分,并且仅比map任务高出几个段落。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45465200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档