gwg*_*gwg 3 functional-programming scala set currying
完全披露:我(是?)参加了Coursera的Scala课程,但是被第二次任务集击败了.我不是只寻找答案(很容易获得)并且无论如何都会获得边际信用.但我真的很想了解发生了什么.
好的,所以这是第一个问题:"定义一个从一个整数值创建单例集的函数:集合表示一个给定元素的集合." 所以我的第一次尝试是这样的:
def singletonSet(elem: Int): Set = Set(elem)
Run Code Online (Sandbox Code Playgroud)
所以这个函数singletonSet只返回一个新创建的Set.它可以这样调用:
val why = singletonSet(3)
// now why is a singleton set with a single integer, 3
Run Code Online (Sandbox Code Playgroud)
这个实现似乎微不足道,所以我用Google搜索答案,这似乎是这样的:
def singletonSet(elem: Int): Set = (x => x == elem)
Run Code Online (Sandbox Code Playgroud)
现在我的理解是这(x => x == elem)是一个匿名函数,它接受一个整数x并返回一个布尔值.但是......什么?所以作为JavaScript开发人员,我决定翻译它:
function singletonSet(elem) {
return function(x) {
return x === elem;
};
};
Run Code Online (Sandbox Code Playgroud)
那么我可以写(我在讨好吗?):
singletonSet(3)(4)
// singletonSet(3) => returns an anonymous function, function(x) { x === 3; };
// function(4) { return 4 === 3; }
// false
Run Code Online (Sandbox Code Playgroud)
如果这甚至接近Scala中发生的事情,似乎我没有创建单例集.相反,我只是检查两个数字是否相同.
我在这里错过了什么?我觉得它必须是非常基本的东西.
提前致谢.
记住这个集合的实现是一个函数.特别是它的一个布尔函数,所以这个函数可以被看作是问一个问题:"这个数字在集合中吗? - 是真还是假." 可以根据需要多次调用该函数,实际上多次询问该问题:
"这是集合中的这个数字吗?是集合中的那个数字吗?" 等等
由于集合是单例集合,因此集合中只有一个数字.所以你通过调用函数来使用该集合,实际上问这个问题"这个数字是集合中唯一的数字吗?" 所以你对这个集合是正确的,单例集只是问这两个数字是否相同.
应该强调的是,这个例子来自Scala中的功能编程原则课程.该课程并不是对Scala的简单介绍.实际上,该课程是故意使事情变得困难,以便能够深入理解函数式编程.通常只会使用范围不可变的Set类.
如果你想使用介于-1000和1000之间的偶数,你可能会使用像这样的迭代器:
(-1000 to 1000).withFilter(_ %2 == 0)
Run Code Online (Sandbox Code Playgroud)
要么:
(-1000 to 1000 by 2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1761 次 |
| 最近记录: |