by shigemk2

当面は技術的なことしか書かない

ポーランド記法|逆ポーランド記法|中置記法 をScalaで書きたい

大半は7shiさんの協力によるものです。ありがとうございます。ぐっちゃけ、polish notation scalaなどでググると出てくると思うんですけどね。というか、逆ポーランド記法については、ググるとあった。

いずれの記法にしても、まずはsplitでリストに分割するのがキモ。

逆ポーランド記法

dropRightを駆使してあれするのもいいですし、:+を使ってもいいです。後者はスタックに数値を積みながら、演算子が来たらスタックの中身を計算する、という方法。前者はfoldLeftを使って畳み込みで計算しています。ちなみに、畳み込みによる計算はすごいH本にもありました。

gist.github.com

gist.github.com

technologyconversations.com

ポーランド記法

Scala関数型デザインの本に乱数のくだりがあるけど、あれに似ている。状態を保持しながら計算してる。ちなみに、

値と状態を関数の戻り値として保持している方法はStateモナドにもありますが。

gist.github.com

qiita.com

中置記法

3 * (1 + 2)みたいなやつの構文解析は、正直言ってかなりつらい。7shiさんの協力がなければ…ダメでした。

gist.github.com

途中までンところ。

gist.github.com

まとめ。

想像以上に難しい。あと、こういうプログラミングは、慣れが重要です。本当に慣れが。

Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)

Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)