从scala中的其他2个函数创建1个函数?

时间:2014-05-14 17:46:21

标签: function scala functional-programming

这个问题与课程中的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

我不是要求解决方案,而是如何围绕这样建设?

4 个答案:

答案 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被定义为从IntBoolean的函数,“求和”两个集合不会返回Set个对象,union表示一个元素应该是一个或另一个集合,但总是表示为一个函数。

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

答案 3 :(得分:0)

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

现在,你的问题。您需要一个函数,当给定两个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