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">
它给了我不可改变的警告。
答案 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)
}
}