scala> def f(x:Int) = x match { | case 0 | 1 | 2 => "unoduetre" | case _ => "altro" | } f: (x: Int)String scala> f(0) res0: String = unoduetre scala> f(10) res1: String = altro scala> def f(x:Int) = x match { | case _ if (x<0) => "negativo" | case 0 => "zero" | case _ => "positivo" | } f: (x: Int)String scala> f(-45) res2: String = negativo scala> f(0) res3: String = zero scala> f(10) res4: String = positivo scala> def f(x:Int) = x match { | case n if (n>0) => "Negativo" | case _ => "Non negativo" | } f: (x: Int)String scala> def f(x:Int,y:Int) = (x,y) match { | case (0,0) => "entrambi zero" | case (0,_) => "primo zero" | case (_,0) => "secondo zero" | case _ => "nessuno zero" | } f: (x: Int, y: Int)String scala> f(0,0) res5: String = entrambi zero scala> f(0,1) res6: String = primo zero scala> f(1,0) res7: String = secondo zero scala> f(1,1) res8: String = nessuno zero scala> def f(x:Int,y:Int) = (x,y) match { | case t if (t._1==0 && t._2==0) => "zero" | case _ => "altro" | } f: (x: Int, y: Int)String scala> f(0,0) res9: String = zero scala> f(0,10) res10: String = altro scala> def len[T](l:List[T]):Int = l match { | case Nil => 0 | case h::t => 1 + len(t) | } len: [T](l: List[T])Int scala> len(List()) res11: Int = 0 scala> len(Nil) res12: Int = 0 scala> len(List(1,2,3,4,5)) res13: Int = 5 scala> def merge(l1:List[Int],l2:List[Int]):List[Int] = (l1,l2) match { | case (Nil,_) => l2 | case (_,Nil) => l1 | case (h1::t1,h2::t2) if (h1 h1::merge(t1,l2) | case (_,h2::t2) => h2::merge(l1,t2) | } merge: (l1: List[Int], l2: List[Int])List[Int] scala> merge(List(1,3,5,7), List(0,2,4,6)) res14: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7) scala> def f(l:List[Int]) = l match { | case h::t => "lista non vuota" | case _ => "lista vuota" | } f: (l: List[Int])String scala> f(Nil) res15: String = lista vuota scala> f(List(1,2,3)) res16: String = lista non vuota scala> def f(x:Any) = x match { | case i:Int => println("intero "+i) | case f:Float => println("float "+f) | case s:String => println("stringa "+s) | case _ => println("non so") | } f: (x: Any)Unit scala> f(8) intero 8 scala> f(8.4) non so scala> f(8.4f) float 8.4 scala> f("ciao") stringa ciao scala> f(Nil) non so scala> def equal[T](l1:List[T],l2:List[T]):Boolean = (l1,l2) match { | case (Nil,Nil) => true | case (Nil,_) => false | case (_,Nil) => false | case (h1::t1, h2::t2) => h1==h2 && equal(t1,t2) | } equal: [T](l1: List[T], l2: List[T])Boolean scala> equal(Nil,Nil) res22: Boolean = true scala> equal(Nil,List(1,2,3)) res23: Boolean = false scala> equal(List(1,2,3),List(1,2,3)) res24: Boolean = true scala> def map[A,B](l:List[A], f:A=>B):List[B] = Nil map: [A, B](l: List[A], f: A => B)List[B] scala> def map[A,B](l:List[A], f:A=>B):List[B] = l match { | case Nil => Nil | case h::t => f(h)::map(t,f) | } map: [A, B](l: List[A], f: A => B)List[B] scala> map(List(1,2,3), (x:Int)=>2*x) res26: List[Int] = List(2, 4, 6) scala> val l=List(1,3,6,3,5,9) l: List[Int] = List(1, 3, 6, 3, 5, 9) scala> l.zipWithIndex res27: List[(Int, Int)] = List((1,0), (3,1), (6,2), (3,3), (5,4), (9,5)) scala> l.zip(List.range(0,l.length)) res28: List[(Int, Int)] = List((1,0), (3,1), (6,2), (3,3), (5,4), (9,5)) scala> l.zip(0 to l.length-1) res29: List[(Int, Int)] = List((1,0), (3,1), (6,2), (3,3), (5,4), (9,5))