44 lines
1.3 KiB
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
|
|
}
|
|
}
|
|
|