This repository has been archived on 2021-10-31. You can view files and clone it, but cannot push or open issues or pull requests.
ProgrammingInScala/Lists/src/main/Main.scala

44 lines
1.3 KiB
Scala

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
}
}