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 个参数,我将其称为 s
和 t
,类型均为 Set
.
: Set
此方法将 return 类型为 Set
的值。稍等...什么是 Set
?
type Set = Int => Boolean
嗯,好的,Set
是一个函数,它以一个 Int
作为参数,并且 return 是一个 Boolean
作为结果。知道了。回到 union()
方法。
(e: Int) => s(e) || t(e)
这是一个接受 Int
类型参数的函数。我将调用该参数 e
。当此函数接收到 Int
时,它将被馈送到 s
和 t
。 s
和 t
都是 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
传递给此函数时,如果 Int
在 Set
中,则函数 return 为真,否则为假。换句话说,这种类型的 Set
与其说是一个集合,不如说是对给定 Set
.
中某物的含义的定义。
现在,在两个 Set
之间调用 union
有什么作用?那么它会生成一个 Set
,其成员至少属于这两个 Set
之一。请记住,Set
只是一个 Int => Boolean
函数,所以:
(e: Int) => s(e) || t(e)
是一个接受一些 Int
参数的函数,将其称为 e
,如果 s(e)
为真或 t(e)
为真,则 return 为真真的。根据union
方法声明,s
和t
是什么?
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
我希望这对未来的学习者有帮助...!我也有这个疑惑...
我在 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 个参数,我将其称为s
和t
,类型均为Set
.: Set
此方法将 return 类型为Set
的值。稍等...什么是Set
?type Set = Int => Boolean
嗯,好的,Set
是一个函数,它以一个Int
作为参数,并且 return 是一个Boolean
作为结果。知道了。回到union()
方法。(e: Int) => s(e) || t(e)
这是一个接受Int
类型参数的函数。我将调用该参数e
。当此函数接收到Int
时,它将被馈送到s
和t
。s
和t
都是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
传递给此函数时,如果 Int
在 Set
中,则函数 return 为真,否则为假。换句话说,这种类型的 Set
与其说是一个集合,不如说是对给定 Set
.
现在,在两个 Set
之间调用 union
有什么作用?那么它会生成一个 Set
,其成员至少属于这两个 Set
之一。请记住,Set
只是一个 Int => Boolean
函数,所以:
(e: Int) => s(e) || t(e)
是一个接受一些 Int
参数的函数,将其称为 e
,如果 s(e)
为真或 t(e)
为真,则 return 为真真的。根据union
方法声明,s
和t
是什么?
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
我希望这对未来的学习者有帮助...!我也有这个疑惑...