2011年3月26日土曜日

Actor使ってみた

Scalaの勉強継続中。関数脳入門を読んでる。
Scalaの特徴的な機能は色々あると思うけど、とりあえずそのうちの1つであるActorを使ってみた。
んで、書いてみたのが↓のプログラム。
   1: package actor
   2:  
   3: import scala.actors._
   4: import scala.actors.Actor._
   5:  
   6: object ActorTest {
   7:  
   8:   def main(args: Array[String]) {
   9:     val receivers = createActor("F", "M", "N")
  10:     receivers.foreach(_.start)
  11:  
  12:     val sender = actor {
  13:       println("sender: sending a message...")
  14:       receivers.foreach(_ ! Unit)
  15:  
  16:       var finishCount = 0;
  17:       loopWhile(receivers.length != finishCount) {
  18:         react {
  19:           case m: String => {
  20:             println("sender: got the reply: " + m)
  21:             finishCount += 1
  22:           }
  23:         }
  24:       }
  25:     }
  26:  
  27:     sender.start
  28:   }
  29:  
  30:   def createActor(label: String*) = {
  31:     label.map(l => actor {
  32:       react {
  33:         case _ => {
  34:           println(l + ": receiver start")
  35:           (0 until 50).foreach(n => println(l + ": " + n))
  36:           reply(l + " done!")
  37:         }
  38:       }
  39:     })
  40:   }
  41: }

何か関数型言語っぽい!・・いや、どうだろう・・w
やっぱ高階関数は便利ですよね。


ちょっとずつScalaにも慣れてきたかなぁ・・。
ただListのメソッドとかが全然浮かばないからダメぽ。
以前から気にはしていたActorモデルとかいうのがどんなものなのかもぼんやり分かってきたので良い感じ。
パーサコンビネータとかは概念的なものは分かってきたけど全く手が動かないんだぜ。
いろんなプログラムを書いてみるしかないなー。

0 件のコメント:

コメントを投稿