goo blog サービス終了のお知らせ 

ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

先週のScala:sum

2011-03-27 01:32:42 | PG(Scala)

先々週~先週のScalaのお勉強は、sum。合算
Seqコレクション(ListやArray・Vector)に入っている値を合算する方法を色々考えてみた。
Listに入っているクラスの値を合算するって、よくありそうなシチュエーションだからね。

その過程でListについてもメモ。
特にJavaのListとは、名前が同じだからといって同じイメージでいると、全く違うことにカルチャーショックを受けるので(笑)
ScalaのListは非常にシンプル。headとtail以外のデータは保持していない。
他のコレクション、例えばArrayやVectorなら要素数を保持しているが、Listには無い。
Listは不変コレクションなのでlazy valとかで要素数を保持できそうなものだが、その領域すら削っているのだろう。それに、sum・productといったメソッドもsizeと同じくlazy valに出来るとは思うけれど、そこまでやったらやり過ぎな気もするし。

話が逸れたが、Scala2.9で並列コレクションが使えるようになるというので、その合算も試してみた。当初は上手く動かなかった(と勘違いした)んだけど、Twitterで教わって、無事動かせた。
そうこうしている間にScala2.9.0RC1が出たようだが、2.9正式版が出てから改めて試してみたい。
(再帰関数を使って合算するならListは優位だが、最速はArrayのwhileループだった。ここに並列処理が加わると、並列Listは無いし、Arrayを並列Arrayにするにはコストがかかるし、どれがいいのか…)

あとは全く関係ないけど、噂のコンパイラプラグインをちょっと試してみた。
特定のメソッドを呼んでたら警告を出すとかは簡単に出来た。すげー(笑)
しかしこれを使って構造(前後関係)のチェックとかをやるのは、大変そうだ(苦笑)



最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。