scala/ScalaBook/chapter-07/actors5.scala
import scala.actors.Actor
import scala.actors.Actor._
case class Val(a: Actor, n: Int)
case class Res(n: Int)
class Fact extends Actor {
def act =
react {
case Val(a,0) => a ! Res(1)
case Val(a,n) =>
var p = new Fact
p.start
p ! Val(self,n-1)
react { case Val(_, m) => a ! Val(a, n*m)
case Res(m) => a ! Val(a, n*m)}
}
}
object actorsExample {
def main(args: Array[String]) {
var factorial = actor {
react {
case Val(a,n) =>
var q = new Fact
q.start
q ! Val(self,n)
react { case Val(_,f) => a ! Val(a,f) }
}
}
factorial ! Val(self,6)
react { case Val(_, n) => println(n) }
}
}