HINWEIS: Das Programm terminiert nicht, da für jede Primzahl ein eigener "Thread" (Actors die per react warten verhalten sich nicht ganz so wie Threads die in einem Loop warten, sondern sind leichtgewichtiger) gestartet wird und diese weiter auf Futter warten. Es ist auf jeden Fall möglich das das ganze anhält, ich will lediglich das Prinzip zeigen und das Beispiel nicht unnötig aufblasen.
import scala.actors.Actor
import scala.actors.Actor._
class Prime(value: Int) extends Actor {
var next: Option[Prime] = None
println(value)
start
def act(): Unit = loop {
react {
case x: Int if ((x % value) != 0) =>
next match {
case Some(p: Prime) => p ! x
case None => next = Some(new Prime(x))
}
}
}
}
object Main {
def main(args: Array[String]): Unit = {
val primer = new Prime(2)
3 to args(0).toInt map (primer ! _)
}
}
Keine Kommentare:
Kommentar veröffentlichen