scala coursera 函数式编程作业 FunSets

scala coursera functional programing assignment FunSets

我在 coursera 上学习了 martin odersky 在 scala 中的函数式编程课程。
但是,我无法理解第二个作业的解决方案 Funsets.scala。

type Set = Int => Boolean

  /**
   * Indicates whether a set contains a given element.
   */
  def contains(s: Set, elem: Int): Boolean = s(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 = (e: Int) => s(e) || t(e)

问题 在上面的函数中e是什么?它从何而来 ?我知道 union 函数结合了两个集合,但是我从方法定义中了解到,它需要 2 个集合作为输入,returns 生成的联合集,所以 e 来自?

  /**
   * Returns the intersection of the two given sets,
   * the set of all elements that are both in `s` or `t`.
   */
  def intersect(s: Set, t: Set): Set = (e: Int) => s(e) && t(e)

同样的问题也适用于 intersect 函数。
请谁能解释一下以上两个函数的操作,即这两个语句

(e: Int) => s(e) || t(e)(e: Int) => s(e) && t(e)

e 称为 参数 。当函数应用于参数时,参数绑定到 参数

例如,在函数中

val f: Int ⇒ Int = i ⇒ i + 1

i是一个参数。如果将 f 引用的函数应用于参数,例如 2,则在函数内部,i 绑定到参数的值,即在函数内部,取消引用 i 的计算结果为 2。因此,应用 f 引用的函数将计算为 3:

f(2)
//=> 3
def union(s: Set, t: Set): Set = (e: Int) => s(e) || t(e)

让我们把它分解成小块。

  • def union() 我正在定义一个我将调用的方法 union.
  • (s: Set, t: Set) 此方法将采用 2 个参数,我将其称为 st,类型均为 Set.
  • : Set 此方法将 return 类型为 Set 的值。稍等...什么是 Set
  • type Set = Int => Boolean 嗯,好的,Set 是一个函数,它以一个 Int 作为参数,并且 return 是一个 Boolean 作为结果。知道了。回到 union() 方法。
  • (e: Int) => s(e) || t(e) 这是一个接受 Int 类型参数的函数。我将调用该参数 e。当此函数接收到 Int 时,它将被馈送到 stst 都是 Set 类型,这意味着当喂食一个 Int 时,它们 return 一个 Boolean。那么我们将有 2 个 Boolean 值,它们将被 OR 在一起产生一个 Boolean,它匹配 Set 的定义(Int 在,Boolean出),大功告成。

现在让我们创建一个示例,看看它是如何使用的。

val setA:Set = x => x == 5   //this Set is true only for 5
val setB:Set = y => y == 2   //this Set is true only for 2
val setU = union(setA, setB) //setA is parameter s, setB is parameter t

setU(2)  //'e' is now 2, this returns true
setU(5)  //'e' is now 5, this returns true
setU(25) //'e' is now 25, this returns false

请记住 Set 是如何在此作业中定义的:它只是一个接受 Int 和 return 的函数 Boolean。当您将一些 Int 传递给此函数时,如果 IntSet 中,则函数 return 为真,否则为假。换句话说,这种类型的 Set 与其说是一个集合,不如说是对给定 Set.

中某物的含义的定义。

现在,在两个 Set 之间调用 union 有什么作用?那么它会生成一个 Set,其成员至少属于这两个 Set 之一。请记住,Set 只是一个 Int => Boolean 函数,所以:

(e: Int) => s(e) || t(e)

是一个接受一些 Int 参数的函数,将其称为 e,如果 s(e) 为真或 t(e) 为真,则 return 为真真的。根据union方法声明,st是什么?

def union(s: Set, t: Set):

s 是描述 Int 是否在 Set s 中的 FUNCTION; t 也是如此。因此,s(e) || t(e) 意味着 e 必须在一个或两个 Set 中,因为两个 Set 中的 union 为 return true - 这正是 union 的定义。

如视频讲座中所述...我们应该将匿名函数分配给基函数。

这里,(x: Int)不是从什么地方带来的,可以当做是不同函数的函数参数。 例如:

def num(s: FunSet): FunSet = (x: Int) => x

this is similar to, 
def function(x: Int) = x

def num(s: FunSet): FunSet = function

我希望这对未来的学习者有帮助...!我也有这个疑惑...