Scala和编写地图功能

时间:2013-10-07 04:15:10

标签: scala functional-programming

假设我有一个函数需要一个定义为Int => Boolean的集合和一个函数f,如下所示:

def map(s: Set, f: Int => Int): Set = {}

现在,如何将此f应用于此集s的每个元素。

def map(s: Set, f: Int => Int): Set = { (i: Int) => f(s(i)) }

哪个是不正确的,因为在f(s(i))中,'s(i)'返回一个布尔值,因此不能对其应用f。问题是如何访问Set的每个元素并在其上应用此f

这个问题是Coursera使用Scala课程的功能编程的一部分。

3 个答案:

答案 0 :(得分:5)

本课程的目标是帮助您理解功能模型,在这种情况下,如何通过函数表示集合(称为该集合的charasteristic函数)。

而不是最终的解决方案,这里有一个关于如何推理这个问题的提示:

给定定义你的集合的特征函数f: Int => Booleanx,如果是f(x) == true,那么x属于集合。现在,如果你有一个函数g:Int=>Int  要在集合上映射,您想要的是将该函数应用于您知道属于集合的元素:if (f(x)) then g(x)

尝试将这种想法运用到练习中。

答案 1 :(得分:1)

如果您正确编写了存在函数:

def map(s: Set, f: Int => Int): Set = (i: Int) => exists(s, (x: Int) => i == f(x))

Bam一行!

答案 2 :(得分:-3)

您需要使用折叠来执行此操作。

def map(s: Set[Int], f: Int => Int): Set[Int] = 
    s.foldLeft(Set.empty[Int])((s,i) => s+f(i))