.scala

Reverse Polish notation calculator

『すごいHaskellたのしく学ぼう!』 の 10章の逆ポーランド記法電卓を Groovy, Scala, Clojure, Scheme で書いてみる。 Reverse Polish notation calculator Groovy def solveRPN(expr) { expr.tokenize().inject([]){ acc, v -> "*" == v ? [acc[1] * acc[0]…

関数型パーサー

もうすぐ Haskell の本が出版されるので復習する。 『プログラミング Haskell』 の第8章を今回は Scala(version 2.9.2) で書く。Scala 的に使った方がいいらしいので Option や Either も勉強する。 Scala の API と以下を参考にしながら書いてみた。 Java …

最長重複文字列問題 in Scala

Clojure 編につづき Scala 編へ Scala は Haskell の多くの関数が用意されているので Haskell からの書き換えるのには有利だ。 def makePair [T](xs: Seq[Seq[T]]) = xs zip xs.tail def comlen [T](p: (Seq[T],Seq[T])) = p.zipped takeWhile(x => x._1 == …

Scala exercises for beginners

id:akihiro4chawon 氏の scala を左傾化させる話 - akihiro4chawonの日記 が元ネタ Pattern match*1 で解いてみた。 Pattern match は好きなのだが RWH によると明示的な再帰より fold を使う方がわかりやすいと書いてあった。この辺りは経験を積んでから判…

Hamming number その2

id:akihiro4chawon 氏のエントリの 1つ目の実装を見て Haskell の実装と同じだったので驚いた。 スクリプトで Haskell と同じように書き直してみる。 val hamming: Stream[BigInt] = BigInt(1) #:: merge(merge(hamming map {_ * 2}, hamming map {_ * 3}), …