我正在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 = ???
这是代码。在singletonSet
我想解决问题的方法是返回Set(elem)
,对吧?
如果这很好,我怎么能在两者之间建立联盟呢?我不是编程的新手,但我看不出有任何办法。因为我不应该返回一组“数字”。
这是另一个学生告诉我关于集合的内容:“但是所有”Set“是一个函数,它接受一个Int并返回一个布尔值(Int => Boolean)。任何带有Int和返回一个符合“Set”类型的布尔值。“
我在联合函数中尝试的是:
def union(s: Set, t: Set): Set = (s | t) //value | not a member of Int => Boolean
任何帮助将不胜感激:)
答案 0 :(得分:35)
看来你正在打击的墙是你不熟悉在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,请不要犹豫提交和迭代。您只需编译代码即可。祝你好运!
答案 1 :(得分:8)
可能的提示是查看类型。查看Set
类型。它实际上是从Int
到Boolean
的函数的类型别名。
因此,当你有两套时,你实际上有两个功能。如何使用它们来提供表示这些Set的并集的函数?这一定是你的出发点。