Pisze kod w jezyku Scala 3. Chcialbym w funkcji main przyjmowac dwie list typu int. Kod:
import scala.annotation.tailrec
def tasuj(l1: List[Int], l2: List[Int]): List[Int] = {
@tailrec
def tailrec(l1: List[Int], l2: List[Int], ret: List[Int] = List.empty[Int]): List[Int] = {
if(l1.length == 0 || l2.length == 0){
return ret;
}
else if(l1.head < l2.head){
if(ret.length == 0 ){//sprawdzam zeby nie uzyc .last na pustej tablicy
tailrec(l1.tail, l2, ret :+ l1.head);
}
else if(ret.last == l1.head){//jesli sie powtarza to usuwam pierwszy element z tablicy w ktorej zostal znaleziony mniejszy element
tailrec(l1.tail, l2, ret);
}
else{
tailrec(l1.tail, l2, ret :+ l1.head);//pierwsza tablica traci pierwszy element, ktory dodawany jest do koncowej
}
}
else if(l1.head == l2.head){
if(ret.length == 0){
tailrec(l1.tail, l2, ret :+ l1.head);
}
else if(ret.last == l1.head){//jesli sie powtarza to usuwam pierwszy element z obu tablic zeby sie nie zapetlilo
tailrec(l1.tail, l2.tail, ret);
}
else{
tailrec(l1.tail, l2, ret :+ l1.head);//pierwsza tablica traci pierwszy element, ktory dodawany jest do koncowej
}
}
else{
if(ret.length == 0){
tailrec(l1.tail, l2, ret :+ l1.head);
}
else if(ret.last == l1.head){//jesli sie powtarza to usuwam pierwszy element z tablicy w ktorej zostal znaleziony mniejszy element
tailrec(l1.tail, l2, ret);
}
else{
tailrec(l1.tail, l2, ret :+ l1.head);//pierwsza tablica traci pierwszy element, ktory dodawany jest do koncowej
}
}
}
tailrec(l1, l2);
}
@main
def zad_04(args1: List[Int], args2: List[Int]): Unit = {
println(tasuj(args1, args2))
}
Jednak caly czas wyswietla sie blad dotyczacy funkcji main o tresci:
No given instance of type scala.util.CommandLineParser.FromString[List[Int]] was found for parameter fs of method parseArgument in object CommandLineParser
Probowalem przyjmowac w main liste typu string i potem dzielic ja na dwie listy typu int, ale to wciaz nie pomagalo.