Ćwiczę Scalę i robię prosty przykład na odwrócenie listy liczb, logika jest prosta:
- odwrócenie pustej listy -> pusta lista
- odwrócenie listy: odwrócenie ogona listy i dodanie głowy
Wykombinowałem w ten sposób:
def reverse(arr : List[Int]) : List[Int] = {
arr match {
case Nil => Nil
case (head:Int) :: (tail:List[Int]) => reverse(tail) ++ List[Int](head)
}
}
Czy to jest zgodne z "duchem Scali"? Chodzi mi tu o 2 rzeczy:
- składnię dla wzorców, może się to da inaczej/krócej/bardziej przejrzyście (czy ten match nie może być piętro wyżej?)
- czy Skala radzi sobie z tą rekurencją, czy tak się nie robi? (wiem, że istnieje iteracyjne reverse)