大家好,我是Scala和一般编程的新手。我在coursera上上了一门Scala课程,其中一个作业是创建以集合为参数的函数,并返回另一个集合,这是两个集合的并/交/差。以下是交集的解决方案:
def intersect(s: Set, t: Set): Set = elem => s(elem) && t(elem)我不明白元素的意思。Scala如何知道它是集合中的一个元素,以及为什么在shell中尝试它会返回错误:缺少参数类型。
联合和差异的解决方案(相同):
def union(s: Set, t: Set): Set = elem => s(elem) || t(elem)
def diff(s: Set, t: Set): Set = elem => s(elem) && !t(elem)可变集合的通用特征。
集合是不包含重复元素的集合。
实现说明:此特征独立于集合的表示提供了集合的大部分操作。它通常由集合的具体实现继承。
要实现一个具体的集合,您需要提供以下方法的实现:
def contains(key: A): Boolean
def iterator: Iterator[A]
def +(elem: A): This
def -(elem: A): This发布于 2013-05-12 05:38:33
来自去年coursera上的scala课程:
object FunSets {
/**
* We represent a set by its characteristic function, i.e.
* its `contains` predicate.
*/
type Set = Int => Boolean
// [...]
}也就是说,Set并没有引用预定义的scala特征,而是引用了一个以Int作为参数并返回Boolean的函数。例如,包含单个元素{3}的集合由函数f(Int)表示,其中f(3)返回true,f(x) with x != 3返回false。
您给出的示例:
def intersect(s: Set, t: Set): Set = elem => s(elem) && t(elem)仅当您以前将类型Set定义为Int => Boolean时才有效。
发布于 2013-05-11 23:25:51
可以使用滤波器函数绘制平行线:
List(1,2,4,5).filter(elem => elem < 4) = List(1, 2) 这里发生的情况是一样的。我们定义一个变量"elem“,并通过它对联合的约束s(elem) && t(elem)来定义它。
至于为什么它在命令行中不起作用,我认为"type“是为Set定义的,而不是一个普通的Set。查看代码
https://stackoverflow.com/questions/16498568
复制相似问题