scala 集合之间的并集

blmhpbnm  于 2023-01-13  发布在  Scala
关注(0)|答案(2)|浏览(156)

我正在参加Coursera的Scala函数式编程课程。这是第二周了,我遇到了瓶颈。在作业中,我们使用了Set,但不是我们在Java中遇到的那种Set。它是一个Set,如果值在其中,它将返回true,否则返回false。他们说它不是容器,它只是一个函数。
为了弄清楚,我需要你的帮助。我不想让你解决我的作业,这只是一个例子,我想得到我应该做什么的想法。

/**
   * We represent a set by its characteristic function, i.e.
   * its `contains` predicate.
   */
  type Set = Int => Boolean

 /**
   * Indicates whether a set contains a given element.
   */
  def contains(s: Set, elem: Int): Boolean = s(elem)

 /**
   * Returns the set of the one given element.
   */
  def singletonSet(elem: Int): Set = Set(elem)

 /**
   * Returns the union of the two given sets,
   * the sets of all elements that are in either `s` or `t`.
   */
  def union(s: Set, t: Set): Set = ???

这是代码,在singletonSet中,我想解决它的方法是返回Set(elem),对吗?
如果这是好的,我应该如何将两者结合起来呢?我对编程并不陌生,但我看不出有什么方法可以做到这一点。因为我不应该返回一个数字“集”。
这是另一个学生告诉我的关于集合的事情:“* 但“Set”只是一个接受Int并返回Boolean的函数(Int =〉Boolean)。任何接受Int并返回Boolean的函数都符合类型“Set”。*”
我在union函数中尝试的是:

def union(s: Set, t: Set): Set = (s | t) //value | not a member of Int => Boolean

任何帮助都将不胜感激:)

cbeh67ev

cbeh67ev1#

看来你碰到的障碍是你不熟悉Scala中的函数定义,在这个特殊的例子中,你需要定义Int => Boolean类型的函数,它们接受Int并返回Boolean
下面是Int => Boolean类型的函数常量的一些示例,请在Scala控制台或Scala IDE工作表中尝试它们:

(x: Int) => true
(x: Int) => false
(x: Int) => x == 2
(x: Int) => x == 10
(x: Int) => x == 2 || x == 10
(x: Int) => x % 2 == 0

然后你要做的就是使用相同的语法,从(x: Int) =>开始,然后把union、intersect...的意思翻译到表达式的右边。
学习的一部分是付出真正的努力。我相信你可以多次重新提交解决方案,所以如果你第一次没有得到10/10,不要犹豫,提交并迭代。你所需要的只是编译代码。祝你好运!

c7rzv4ha

c7rzv4ha2#

一个可能的提示是看类型,看Set类型,它实际上是从IntBoolean的函数的类型别名。
因此,当你有两个集合时,你实际上有两个函数,你如何使用它们来提供一个表示这些集合的并集的函数,这必须是你的出发点。

相关问题