このポストはすでに古い。 こちら 改訂版 を参照ください。
今回は 前回のエントリーで実装した Writer を引き続き使って、 より実践的な例でこれがどのように便利かを説明します。
» Read Moreこのポストはすでに古い。 こちら 改訂版 を参照ください。
たとえば価格改定などで、昨年と今年の価格表がエクセルデータとして支給される。 そして、それを商品ごとにマージして、最新の価格表を提出せよ、 といったタスクがあったとする。
このとき、商品ごとにキーとしての id が設定されているわけでもなく 商品名が一致したら同じ商品として扱うという雑な仕様。 そして、入力ミスにより微妙に商品名が昨年と今年で異なるものが含まれてもいるのだが、 同じ商品として扱ってほしいと言われたりする。
さらに価格が値下がりしている商品があるのだが、それらは価格入力をミスしている恐れがあるので、 そういう場合は警告しなければならない。などなど。 このような状況で、昨年と今年のデータをマージして最新の商品価格情報を作り出す必要がある場合に、 Writer Monad があれば心強い ですよ、という話です。
» Read More随分以前に Kotlin Sealed クラスを使った Maybe の実装というエントリーを書いたのだが、 Maybe を使う目的が 値があったりなかったりする値 を上手に扱いたい、ということであれば、 わざわざ自前で定義するのではなく、 (Java とか Kotlin の世界では)java.util.Optional を使えばいいじゃないか。
» Read More要するに Tree 構造のものをフラットにしたい。
たとえば、特定のディレクトリ以下から PDF ファイルのみを抜き出してなにか処理するとか、そんなタスクに使うコード。 もちろん、シェルスクリプトで書けば以下のように簡単に記述することができる。
» Read Moreたとえば無印良品のこの食品 フライパンでつくるミールキット 海老といかのアヒージョの商品表示情報のPDFをみると以下のような文字列が原材料名に記載されています。
ブロッコリー(エクアドル)、揚げじゃがいも(じゃがいも(国産)、植物油脂)、殻付き海老(インド)、いか(中国)、(一部にえび・いかを含む)
このように括弧が入れ子で多重に出現している文字列、しかも、一重/二重/三重・・・ n 重のバリエーションがある文字列をパースすることを考えたい。
最終的には以下のように括弧で括られた部分を AST(Abstract syntax tree) に 変換して、各トークンをその括弧の包含関係を生かした状態で把握できるようにしたい。
» Read Moreこのように、タイプとポケモン名が列挙されているデータがあるとする。 これをA列をキーにして同じタイプを持つポケモンをまとめたい(グループにしたい)という場合。 エクセルで対処するには、どうすればいいか。 および、Kotlin での計算方法。
» Read More以前にGroovy / Golang / Node.js, リストを n 個ごとに分割したリストのリスト(サブリスト)をつくりたい というエントリーを書いたのだが、kotlin でそれをつくり出す必要が生じたので備忘録として書き残します。
ここで言うサブリストとは、リストを n 個ごとに分けたい、という場合につくるリストのリストのことです。
» Read MoreKotlin の Sealed クラスを使えば、 代数データ型の直和型を表現できる、という情報を得たので、MaybePokemon クラスをつかって試してみた。
» Read More今回は Writer モナドと bind について使い方を調べます。
Writer モナドは複雑なので、Writerで実現したい計算に近いコードを Maybe モナドで書き、その後それを Writer モナドに書き換えます。
» Read More二つのリストから countif をつかって 両方のリストに重複して含まれている要素のみを取り出したリストをつくる.
これを Node.js + Underscore で実装した。(覚え書き)
» Read More