package main /** * Created by claudio on 27/11/16. */ object Main { def main(args: Array[String]): Unit = { val fruits = List("apples", "pears", "bananas") val fruitsAndLemon = "lemon" :: fruits val one :: two :: rest = fruitsAndLemon println(s"$one $two $rest") val nums = 3 :: 2 :: 1 :: Nil println(isort(nums)) println(msort[Int](_ < _)(nums)) println(concatenate(1 :: 2 :: 3 :: Nil, 4 :: 5 :: Nil)) } def isort(list: List[Int]): List[Int] = list match { case Nil => Nil case head :: tail => insert(head, isort(tail)) } def insert(head: Int, tail: List[Int]): List[Int] = tail match { case Nil => head :: Nil case tailHead :: tailTail => if(head < tailHead) head :: tail else tailHead :: insert(head, tailTail) } def concatenate[T](first: List[T], second: List[T]): List[T] = first match { case Nil => second case firstHead :: firstTail => firstHead :: concatenate(firstTail, second) } def msort[T](less: (T,T) => Boolean)(list: List[T]): List[T] = list match{ case Nil => Nil case a :: Nil => a :: Nil case _ => val length = list.length/2 val front = msort(less)(list take length) val ending = msort(less)(list drop length) if(less(front.head,ending.head)) front ::: ending else ending ::: front } }