4

所以假设我有一个函数,它需要一个带有定义的 SetInt => Boolean和一个像这样的函数f

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

现在我如何将此应用于f此 set 的每个元素s

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

这当然是不正确的f(s(i)),因为在 's(i)' 返回一个布尔值,因此不能应用于f它。问题是如何访问 Set 的每个元素并将其应用于f它?

这个问题是 Coursera 的 Scala 函数式编程课程的一部分。

4

3 回答 3

5

本课程的一个目标是帮助您理解函数模型,以及在这种情况下,集合如何由函数表示(称为该集合的特征函数)。

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

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

尝试将这种想法应用到您的练习中。

于 2013-10-07T09:58:22.563 回答
1

如果您正确编写了 exists 函数:

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

砰的一声!

于 2017-04-04T03:26:40.223 回答
-3

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

def map(s: Set[Int], f: Int => Int): Set[Int] = 
    s.foldLeft(Set.empty[Int])((s,i) => s+f(i))
于 2013-10-07T05:00:50.373 回答