在Scala中实现MyMap(高阶函数)

时间:2015-12-17 17:08:58

标签: scala fold

myMap应该采用两个curried函数。 1)通用列表 2)评估List的每个元素的函数。

将Function应用于每个元素后,myMap的返回值为List。

<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">

它给了我不可改变的警告。

2 个答案:

答案 0 :(得分:0)

这是一个有效的解决方案

def myMap(f: Int => Int)(list: List[Int]): List[Int] = {
  list match {
    case Nil => Nil
    case head :: tail =>
      f(head) :: myMap(f)(tail)
  }
}

您的代码(除格式化外)还有很多问题。

不要使用大写字母表示vals

你的var毫无意义,因为你永远不会修改它,因为你可以简单地使用你的论点,这个任务是无用的。

你的if如果需要别的话,那么它就不会真地回归Nil

您可以将此函数设为泛型,将Int替换为泛型

def myMap[A](f: A => A)(list: List[A]): List[A] = {
  list match {
    case Nil => Nil
    case head :: tail =>
      f(head) :: myMap(f)(tail)
  }
}

要使你的if else解决方案有效,你可以这样做:

def myMap[A](f: A => A)(list: List[A]): List[A] = {
  if (list.isEmpty) {
    Nil
  } else {
    val (head :: tail) = list
    f(head) :: myMap(f)(tail)
  }
}

答案 1 :(得分:0)

如果添加遗漏的其他块

,您的解决方案将有效
def myMap (f: Int=>Int) ( L:List[Int]) : List[Int] = {
  var xx = L
  if(L.isEmpty)  Nil
  else { 
    val (head::tail) = xx
    f(head) :: myMap (f) (tail)
  }
 }