scala coursera功能编程分配FunSets

问题描述 投票:2回答:3

我已经接受了马丁·奥德斯基在课程中的scala中的函数式编程课程。 但是,我无法理解第二个Assignment 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)

问题在上面的功能是什么?它从何而来 ?我知道union函数结合了两个集合,但是我从方法定义中理解的是它需要2个集合作为输入并返回结果集合,那么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)

同样的问题适用于交叉函数。 请任何人解释一下上述两个函数的操作,即这两个陈述

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

scala functional-programming purely-functional
3个回答
0
投票

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

例如,在函数中

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

i是一个参数。如果将f引用的函数应用于参数,比如2,那么在函数内部,i绑定到参数的值,即在函数内部,解引用i求值为2。因此,应用f引用的函数将评估为3

f(2)
//=> 3

2
投票
def union(s: Set, t: Set): Set = (e: Int) => s(e) || t(e)

让我们把它分解成小块。

  • def union()我正在定义一种方法,我称之为union
  • (s: Set, t: Set)这个方法将采用两个参数,我称之为st,两种类型都是Set
  • : Set此方法将返回typeSet的值。等等......什么是Set
  • type Set = Int => Boolean啊,好的,Set是一个以Int为参数并返回Boolean的函数。得到它了。回到union()方法。
  • (e: Int) => s(e) || t(e)这是一个采用Int类型的单个参数的函数。我要打电话给那个参数e。当这个函数收到Int时,它将被送到stst都是Set型,这意味着当喂食Int时,它们会返回Boolean。那么我们将有2个Boolean值,它们将被一起生成一个单独的Boolean,它与SetInt in,Boolean out)的定义匹配,所以我们已经完成了。

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

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

0
投票

记住在这个任务中如何定义Set:它只是一个接受Int并返回Boolean的函数。当你将一些Int传递给这个函数时,如果IntSet中,函数返回true,如果不是,则返回false。换句话说,这种类型的Set实际上并不是一个集合,而是对给定Set中某些东西的含义的定义。

现在,在两个unions之间调用Set怎么办?那么它产生了一个Set,其成员至少在这两个Sets中的一个。请记住,Set只是一个Int => Boolean函数,所以:

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

是一个函数,它接受一些Int参数,称之为e,如果QITHxswpoi为真或者s(e)为真,则返回true。根据t(e)方法声明,什么是unions

t

def union(s: Set, t: Set):是描述s是否在Int Set中的功能;同样对于s。因此,t意味着s(e) || t(e)必须在一个或两个es中,因为两个Sets的union返回true - 这正是Set的定义。

© www.soinside.com 2019 - 2024. All rights reserved.