作业帮助:集合之间的联合

And*_*rew 13 functional-programming scala

我正在Scala课程中学习Coursera功能编程.这是第二周,我撞墙了.在赋值中,我们使用Sets,但不是我们在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 = ???  
Run Code Online (Sandbox Code Playgroud)

这是代码.在singletonSet我想解决它的方法是返回Set(elem),对吗?

如果这很好,我怎么能在两者之间建立联盟呢?我不是编程的新手,但我看不出有任何办法.因为我不应该返回一组"数字".

这是另一个学生告诉我关于集合的内容:" 但是所有"Set"是一个函数,它接受一个I​​nt并返回一个布尔值(Int => Boolean).任何一个接受Int并返回一个布尔值的函数都符合这个类型'设置'. "

我在union函数中尝试的是:

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

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

huy*_*hjl 35

看来你正在打击的墙是你不熟悉Scala中的定义函数.在这种特殊情况下,您需要定义类型的函数Int => Boolean,它们采用Int并返回a 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
Run Code Online (Sandbox Code Playgroud)

然后,您需要为分配所做的就是使用相同的语法,首先(x: Int) =>将union,intersect,...的含义转换为表达式的右侧.

学习的一部分是给予真正的努力.我相信你可以多次重新提交解决方案,所以如果你第一次尝试没有获得10/10,请不要犹豫提交和迭代.您只需编译代码即可.祝好运!

  • 这并不是说我不欣赏你的答案.相反,非常感谢你 (2认同)

Nic*_*las 8

可能的提示是查看类型.看看Set类型.它实际上是一个类型别名从功能IntBoolean.

因此,当你有两套时,你实际上有两个功能.如何使用它们来提供表示这些Set的并集的函数?这一定是你的出发点.

  • 你有两个函数`Int => Boolean`,结果是Int => Boolean,你必须从两个初始函数构建自己的函数:x =>`f(x)|| G(X)` (7认同)