scala之我对 Scala Sets 的理解有什么问题

bluestorm 阅读:39 2024-09-07 23:24:14 评论:0

完全披露:我正在(曾经?)参加 Coursera 的 Scala 类(class),但被关于 Sets 的第二个作业难倒了。我不只是在寻找答案(很容易获得)并且无论如何都会获得边际信用。但我真的很想了解发生了什么。

好的,所以这是第一个问题:“定义一个函数,它从一个整数值创建一个单例集:该集表示一个给定元素的集。”所以我的第一次尝试是这样的:

def singletonSet(elem: Int): Set = Set(elem) 

所以这个函数 singletonSet 只返回一个新创建的 Set。它可以这样调用:

val why = singletonSet(3) 
// now why is a singleton set with a single integer, 3 

这个实现看起来微不足道,所以我用谷歌搜索了答案,似乎是这样的:

def singletonSet(elem: Int): Set = (x => x == elem) 

现在我的理解是 (x => x == elem) 是一个匿名函数,它接受一个整数 x 并返回一个 bool 值。但是……什么?因此,作为一名 JavaScript 开发人员,我决定翻译它:

function singletonSet(elem) { 
    return function(x) { 
        return x === elem; 
    }; 
}; 

然后我可以写(我在柯里化(Currying)吗?):

singletonSet(3)(4) 
 
// singletonSet(3) => returns an anonymous function, function(x) { x === 3; }; 
// function(4) { return 4 === 3; } 
// false 

如果这与 Scala 中发生的情况非常接近,那么我似乎没有在创建单例集。相反,我只是检查两个数字是否相同。

我在这里错过了什么?我觉得这一定是一些非常基础的东西。

提前致谢。

请您参考如下方法:

记住这个集合的实现是一个函数。特别是它是一个 bool 函数,所以该函数可以看作是在问这个问题:“这个数字在集合中吗?- 真还是假。”您可以根据需要多次调用该函数,实际上是多次询问该问题:

“这个数在集合中吗?那个数在集合中吗?”等等等等

由于集合是单例集合,所以集合中只有一个数。因此,您通过调用该函数来使用该集合,并提出问题,实际上,“这个数字是集合中唯一且唯一的数字吗?” 所以你是对的这个集合,单例集合只是在问这两个数字是否相同。

需要强调的是,这个例子来自《Scala 中的函数式编程原理》类(class)。本类(class)并不意味着对 Scala 的简单介绍。实际上这门课是故意刁难的,目的是让大家对函数式编程有更深刻的理解。通常人们只会使用范围内不可变的 Set 类。

如果你想处理 -1000 到 1000 之间的偶数,你可能会使用像这样的迭代器:

(-1000 to 1000).withFilter(_ %2 == 0) 

或:

(-1000 to 1000 by 2) 


标签:Scala
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号