scala

比較はモノイド

比較モナドについて考察されている一連のエントリに感銘を受けて、私も比較について考えてみました。 比較モナド - terazzoの日記 続・比較モナド - terazzoの日記 続・続・比較モナド〜復讐編〜 - terazzoの日記 まず、考察対象として「比較結果」と「比較…

実用的な同時並行ソートを実装する話

scala の parallel collection は、普通の collection を使うように使っているだけで、並列計算の恩恵を受けられる場合も多いのですが、そうではない場合も多いです。その典型例が、ソートです。実は、並列のソートは、まだ実装されていません。じゃあ、自分…

scala を左傾化させる話

Scala exercises for beginners を foldLeft で解いてみた。 // Exercise 2 def sum(x: List[Int]): Int = x.foldLeft(0){_ + _} // Exercise 3 def length[A](x: List[A]): Int = x.foldLeft(0){(sum, _) => sum + 1} // Exercise 4 def map[A, B](x: List[…

akka の例題を parallel collection で実装

akka の例題では、arctan(1) をテーラー級数展開して円周率を求めるという例題を取り上げている。具体的には、下記の数式を10000項ずつ Actor に割り振って、並列計算している。このような級数を scala で並列計算する方法としては、akka を使う以外にも、sc…

Scala の内面を Haskell 化する話

Scala を使って Haskell 風の記述をしている例を時々見かけるけれど、徹頭徹尾 Haskell になっている例はあまり見掛けない。アプリケーションロジックだけ見れば同じなんだけれど、実際の内部動作は全然違っていたりする。そして、パフォーマンスが致命的に…

ハミング数の算法 3種 - infinite list, imperative queue, cyclical iteration

素因数分解が の形式になる数をハミング数という*1。この手の問題は、やはり Haskell で書くとスッキリする。Hamming numbers - Rosetta Code から Haskell のコードを引用する。 hamming = 1 : map (2*) hamming `merge` map (3*) hamming `merge` map (5*)…

基礎から始める覆面算

Scala の for 式で覆面算を解いているエントリを見つけた人が Haskell と Groovy で解きながらリスト内包表記について考えていた。このようなエントリを見かけると、いつも面白いなーと感心するけど、どうも私は実戦で使いこなせていない。おそらくは、パフ…

時間帯重複チェック:仕様変更で絶賛炎上中編

先日、時間帯重複チェック の問題を Scala で解いてみたのですが、その応用編が出題されました。なんと、「お客様から仕様変更を言い渡されました」ですと。(><)うえーんうえーん、さきに言ってよー。スパゲチーくらえー!!!今回は特に見所はありませ…

答案:時間帯重複チェック (Scala による Option モナド活用編)

お題:時間帯重複チェック - No Programming, No Life を Scala で解いてみました。「失敗するかもしれない処理」を記述する際に、Java では例外を使うと思いますが、Scalaでは、Option を使うという選択肢があります。そこで、今回の答案は、例外ではなくて…

scala 2.9 collection.parallel を実戦投入です!!

プログラミング問題サイトProject Eulerの第216問に、こんな問題が出た。1 自然数 n について、2*n2-1 が素数となるものの個数を求めよ普通に素数判定すると計算時間がかかる(一時間くらい?)ので工夫したアルゴリズムで解け、というのが出題意図と思う。…