From bedac58408e4c6a701dd8065ed7a11277f5358e5 Mon Sep 17 00:00:00 2001 From: Guillermo Ramos Date: Tue, 8 May 2012 17:41:55 +0200 Subject: [Scala] Día 3 --- scala/chores.scala | 8 ++++++++ scala/factorial.scala | 7 +++++++ scala/kids.scala | 31 +++++++++++++++++++++++++++++++ scala/movies.scala | 13 +++++++++++++ scala/sizer.scala | 45 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 scala/chores.scala create mode 100644 scala/factorial.scala create mode 100644 scala/kids.scala create mode 100644 scala/movies.scala create mode 100644 scala/sizer.scala diff --git a/scala/chores.scala b/scala/chores.scala new file mode 100644 index 0000000..0e33b5f --- /dev/null +++ b/scala/chores.scala @@ -0,0 +1,8 @@ +def doChore(chore:String):String = chore match { + case "clean dishes" => "scrub, dry" + case "cook dinner" => "chop, sizzle" + case _ => "whine, complain" +} + +println(doChore("clean dishes")) +println(doChore("mow lawn")) diff --git a/scala/factorial.scala b/scala/factorial.scala new file mode 100644 index 0000000..0cfbc0c --- /dev/null +++ b/scala/factorial.scala @@ -0,0 +1,7 @@ +def factorial(n:Int):Int = n match { + case 0 => 1 + case x if x > 0 => factorial(n-1) * n +} + +println(factorial(3)) +println(factorial(0)) diff --git a/scala/kids.scala b/scala/kids.scala new file mode 100644 index 0000000..590e742 --- /dev/null +++ b/scala/kids.scala @@ -0,0 +1,31 @@ +import scala.actors._ +import scala.actors.Actor._ + +case object Poke +case object Feed + +class Kid() extends Actor { + def act() { + loop { + react { + case Poke => { + println("Ow...") + println("Quit it...") + } + case Feed => { + println("Gurgle...") + println("Burp...") + } + } + } + } +} + +val bart = new Kid().start +val lisa = new Kid().start + +println("Ready to poke and feed...") +bart ! Poke +lisa ! Poke +bart ! Feed +lisa ! Feed diff --git a/scala/movies.scala b/scala/movies.scala new file mode 100644 index 0000000..d8b145d --- /dev/null +++ b/scala/movies.scala @@ -0,0 +1,13 @@ +val movies = + The incredibles + WALL E + Jack Jack Attack + Geri's Game + + +(movies \ "_").foreach { movie => + movie match { + case {movieName} => println(movieName) + case {shortName} => println(shortName + " (short)") + } +} diff --git a/scala/sizer.scala b/scala/sizer.scala new file mode 100644 index 0000000..6f60cc4 --- /dev/null +++ b/scala/sizer.scala @@ -0,0 +1,45 @@ +import scala.io._ +import scala.actors._ +import Actor._ + +object PageLoader { + def getPageSize(url:String) = Source.fromURL(url, "ISO-8859-1").mkString.length +} + +val urls = List("http://amazon.com", + "http://twitter.com", + "http://google.com", + "http://cnn.com") + +def timeMethod(method: () => Unit) = { + val start = System.nanoTime + method() + val end = System.nanoTime + println("Method took " + (end-start)/1000000000.0 + " seconds.") +} + +def getPageSizeSequentially() = { + for (url <- urls) { + println("Size for " + url + ": " + PageLoader.getPageSize(url)) + } +} + +def getPageSizeConcurrently() = { + val caller = self + + for (url <- urls) { + actor { caller ! (url, PageLoader.getPageSize(url)) } + } + + for (i <- 1 to urls.size) { + receive { + case (url, size) => + println("Size for " + url + ": " + size) + } + } +} + +println("Sequential run:") +timeMethod { getPageSizeSequentially } +println("Concurrent run:") +timeMethod { getPageSizeConcurrently } -- cgit v1.2.3