我对如何编写映射两个列表的map函数很困惑:
例如:
def map[A,B,C](f: (A, B) => C, lst1: List[A], lst2: List[B]): List[C]
Run Code Online (Sandbox Code Playgroud)
输入将是2个列表,输出可以是替代地添加整数的列表
测试示例:
assert(map(add, List(1, 2, 3), List(4, 5, 6)) == List(5, 7, 9))
Run Code Online (Sandbox Code Playgroud) 我有一个递归方法,其中删除它应该来自给定列表的所有零.
def removeZ(list:List[Int], n:Int):List[Int] = list match {
case Nil => Nil
case h::t=>
if (h == n)
t
else
h :: removeZ(t,n)
}
Run Code Online (Sandbox Code Playgroud)
这将从列表中删除一个零,但如果列表有多个零,则不会.我尝试添加另一个if else语句,它不起作用,例如:
if else(t==n)
removeZ(t,n)
Run Code Online (Sandbox Code Playgroud)
如何删除所有零?
如何编写zip函数,它将列表中的相应元素组成元组.我知道zip是一个内置功能,但我试图从头开始编写它.
def zip[A,B](lst1: List[A], lst2: List[B]): List[(A, B)]
Run Code Online (Sandbox Code Playgroud)
测试例子是:
test("zip test 1") {
assert(zip(List(1, 2, 3), List(4, 5, 6)) == List((1,4), (2, 5), (3, 6)))
}
Run Code Online (Sandbox Code Playgroud)
或字符串作为参数:
test("zip test 2") {
assert(zip(List("hey", "code"), List("world", "scala")) ==
List(("hey", "world"), ("code", "scala")))
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我试过这个:
def zip[A,B](lst1:List[A], lst2:List[B]):List[(A,B)] = (lst1,lst2) match{
case Nil=> Nil
case (h1::t1 :: h2 :: t2) =>zip(t1, t2)
}
Run Code Online (Sandbox Code Playgroud)
但是我遇到了类型不匹配错误和不可变性错误.