这个问题与课程中的scala课程有关,所以我想请你不要给我一个简单的解决方案,我可以复制粘贴,因为这会打破课程荣誉代码。
这与第二项任务有关。
def Set = Int => Boolean
可以看出,Set是一个返回天气的函数,给定的int是否是集合的一部分。到目前为止,这很简单。但是,该任务要求我创建一个联合
def union(f: Set, s: Set): Set = ???
此联合应返回满足两个集的条件的集合。 我怎么能这样做:
我认为这样的事情可以通过将功能添加到一起来完成,但是以下代码:
f + s
无法按预期正确编译
我的问题是:
我如何能够从其他2个函数创建函数?
x => if x == 0 true else false //first
x => if x == 1 true else false //second
什么应该相等:
x => if x==0 || x == 1 true else false
我不是要求解决方案,而是如何围绕这样建设?
答案 0 :(得分:2)
我认为您已经了解,这些集合是测试值是否符合每个集合的条件的函数。
这样一个Set的并集也必须是一个返回布尔值的函数(如类型签名所示)
def union(f: Set, s: Set): Set
(因为Set
是类型别名)等同于:
def union(f: Int => Boolean, s: Int => Boolean): Int => Boolean
简单英语中,两组A和B的联合意味着:"是A 或 B"中的项目。
你的任务是编写一个执行普通英语规范的函数。
你不能"添加"两个功能在一起(至少,不是适用于这个问题的方式),但你可以结合他们的结果。
答案 1 :(得分:2)
Set
的格式为Set = Int => Boolean
。如果值为Int
,则true
函数将返回Set
。
如果我们想创建一个单例集,我们将返回 new 函数,它将传递给它的任何值与传递给创建它的函数的值进行比较。
两套联合,是一套加另一套。这意味着您要查找的元素必须位于另一个或中。但是我们如何获得 new 集合,我们返回一个 new 函数来做这件事 - 检查一个元素是否在一个集合或另一个集合中。
请记住,在Scala函数中可以返回函数,这些函数可以在以后进行评估。我认为这是关键。
答案 2 :(得分:1)
Set
被定义为从Int
到Boolean
的函数,“求和”两个集合不会返回Set
个对象,union表示一个元素应该是一个或另一个集合,但总是表示为一个函数。
我希望这不是太多,但考虑到一个元素,它应该满足f
或s
。
答案 3 :(得分:0)
首先,它是type Set =
。不是def
。 Set
是类型别名而不是函数定义。
现在,你的问题。您需要一个函数,当给定两个Int =>Boolean
将它们与OR组合并返回Int => Boolean
时。
首先,您将如何为两个Boolean
参数执行此操作?
def or(a: Boolean, b: Boolean) = a || b
所以现在我们已经到了一半了。我们有什么:
Int => Boolean
函数。Boolean
并返回Boolean
。所以我们需要做的就是将<{em>} Set
应用于Int
以获得Boolean
和OR结果。混乱可能在这里。
理解函数的最简单方法是明确地执行此操作
def union(f: Set, s: Set): Set = {
def doUnion(x: Int) = //apply x to f and s, return OR
doUnion
}
但是我们可以在Scala中通过声明一个匿名函数来内联
def union(f: Set, s: Set): Set = x => //apply x to f and s, return OR