Scala日記

Scalaの備忘録。ときどき研究の話。

Functional pearls

Functional pearls という素敵な論文集を見つけた。 日本語の訳本

関数プログラミング 珠玉のアルゴリズムデザイン

関数プログラミング 珠玉のアルゴリズムデザイン

も出ているようですが、元になっている原稿がここでだいぶ読めます。

Research papers/Functional pearls - HaskellWiki

Scala関数型プログラミングをする練習がてらに、とりあえず Snake Cube を Scala に翻訳してみました。

元原稿:

http://web.cecs.pdx.edu/~mpj/snakecube/revised-SnakeCube.pdf

Haskellのコード:

http://web.cecs.pdx.edu/~mpj/snakecube/Snake.lhs

http://web.cecs.pdx.edu/~mpj/snakecube/SnakeDraw.lhs

書いたScalaのコード:

https://github.com/Yuichiroh/FunctionalPearls/blob/master/src/main/scala/yuima/funcpearls/SnakeCube.scala

Scalaでもほとんど同じように書けますが、関数型で書くときはHaskellのほうが簡潔に記述できる印象。 というか、Haskellなんじゃこりゃ。今までまじめに読み書きしたことがありませんでしたが、ぱっと見すごく自由。 一体どんな最適化が働くのか気になります。

続きで数独もやってみました。

https://github.com/Yuichiroh/FunctionalPearls/blob/master/src/main/scala/yuima/funcpearls/SudokuSolver.scala

これも大体同じように書ける模様。 関数型のこつが少しずつわかってきた感じ。