从Scala中的其他2个功能中创建1个功能?

Create 1 function from 2 other functions in scala?

这个问题与来自Coursera的Scala课程有关,因此,我想请您不要给我简单的解决方案,使我可以复制粘贴,因为这会破坏Coursera荣誉代码。

这与第二个任务有关。

1
def Set = Int => Boolean

可以看出,Set是一个返回天气的函数,给定的int是否是集合的一部分。到目前为止,这是简单明了的。但是任务要求我创建一个工会

1
 def union(f: Set, s: Set): Set = ???

此联合应返回一个满足两个集合条件的集合。
我该怎么做这样的事情:

我认为可以通过将以下函数添加到一起来完成这些事情:

1
f + s

无法按预期正确编译

我的问题是:

如何从其他2个函数创建一个函数?

1
2
x => if x == 0 true else false //first
x => if x == 1 true else false //second

什么应该等于:

1
x => if x==0 || x == 1 true else false

我不是要寻求解决方案,而是要如何构建类似的东西?


Set的形式为Set = Int => Boolean。给定Int函数,如果该值位于Set中,则将返回true

好吧,如果我们要创建一个单例集,我们将返回新函数,该函数将比较传递给它的任何值和传递给创建它的函数的值。

两组的并集是一组加上另一组。这意味着您要查找的元素必须位于一个或另一个集中。但是我们如何获得新的集合,好吧,我们返回一个新函数来执行此操作-检查一个元素是在一个集合中还是在另一个集合中。

请记住,在Scala中,函数可以返回函数,稍后可以对其进行评估。我认为那是关键。


正如我认为您已经理解的那样,这些Set是用于测试某个值是否满足每个Set的条件的函数。

这样的Set的并集还必须是一个返回布尔值的函数(如类型签名所示)

1
def union(f: Set, s: Set): Set

哪个(因为Set是类型别名)等效于:

1
def union(f: Int => Boolean, s: Int => Boolean): Int => Boolean

用简单的英语来说,两个集合A和B的并集表示:"是A或B中的项目"。

您的任务是编写一个执行该简单英语规范的函数。

您不能将两个功能"添加"在一起(至少不能以适用于此问题的方式),但是可以将它们的结果合并。


Set被定义为从IntBoolean的函数,"求和"两个Set不会返回Set对象,并集意味着一个元素应该在一个或另一个set中,但始终表示为函数。

我希望这不是太多,但是给定一个元素,它应该满足fs


首先,它是type Set =。不是defSet是类型别名,而不是函数定义。

现在,您的问题。您需要一个函数,当给定两个Int =>Boolean并将其与OR组合并返回Int => Boolean时,该函数。

首先,您将如何针对两个Boolean参数执行此操作?

1
def or(a: Boolean, b: Boolean) = a || b

所以现在我们到了一半。我们有什么:

  • 一对Int => Boolean函数。
  • 需要两个Boolean并返回Boolean的函数。

因此,我们要做的就是将每个Set应用于Int以获得Boolean和或结果。混乱可能在这里。

咖喱函数的最简单方法是显式地

1
2
3
4
def union(f: Set, s: Set): Set = {
    def doUnion(x: Int) = //apply x to f and s, return OR
    doUnion
}

但是我们可以在Scala中通过声明一个匿名函数进行内联

1
def union(f: Set, s: Set): Set = x => //apply x to f and s, return OR