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