大半は7shiさんの協力によるものです。ありがとうございます。ぐっちゃけ、polish notation scalaなどでググると出てくると思うんですけどね。というか、逆ポーランド記法については、ググるとあった。
いずれの記法にしても、まずはsplitでリストに分割するのがキモ。
逆ポーランド記法
dropRightを駆使してあれするのもいいですし、:+を使ってもいいです。後者はスタックに数値を積みながら、演算子が来たらスタックの中身を計算する、という方法。前者はfoldLeftを使って畳み込みで計算しています。ちなみに、畳み込みによる計算はすごいH本にもありました。
ポーランド記法
Scala関数型デザインの本に乱数のくだりがあるけど、あれに似ている。状態を保持しながら計算してる。ちなみに、
値と状態を関数の戻り値として保持している方法はStateモナドにもありますが。
中置記法
3 * (1 + 2)みたいなやつの構文解析は、正直言ってかなりつらい。7shiさんの協力がなければ…ダメでした。
途中までンところ。
まとめ。
想像以上に難しい。あと、こういうプログラミングは、慣れが重要です。本当に慣れが。
Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)
- 作者: Paul Chiusano,Rúnar Bjarnason,株式会社クイープ
- 出版社/メーカー: インプレス
- 発売日: 2015/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る