第1章の03から06まで(言語処理100本ノック2020)

Posted by johtani on Thursday, April 9, 2020

目次

Rustで言語処理100本ノックのリファクタリングの続き。

前回はこちら

コードも載せたほうが見やすいかなぁ?

03. 円周率

2年前はこちら。 どちらかというとJavaっぽい書き方かな? 入れ物を用意して、入力を整形して、それからループを回す感じで書いてました。

今回は1行で収めてみました。 Rustっぽく、returnを省略してみました。 あとは、Iteratorを組み合わせる感じでやってます。 アルファベットの文字数ということで、is_alphabetic()メソッドでfilterしてます。

04. 元素記号

2年前はこちら。 エラー処理が多いのと、文字の扱いがちょっと

ここまで同様に極力イテレータを利用するという方針でリファクタリングしました。 あとは、エラー処理を除去してます。 正常系だけのテストなのでスッキリさせました。

こういった、ストリーム系?の書き方の場合にエラー処理をどう入れるかってところはちょっと悩みどころになるんじゃないかなぁ?と思いつつ、イレギュラーなものは後回しで(あとにやるのかなぁ?)

05. n-gram

2年前はこちら。 これまでと同じく、入れ物を作ってから処理をしてます。

同じく、極力イテレータを利用する形で実装しました。 いくつか型の変換が必要なので、.map()を呼び出して詰め替えたりしています。

06. 集合

2年前はこちら。 独自に実装しています。

せっかく05で文字n-gramの配列を返す処理を実装しているので、 そちらを呼び出して、Setに入れるという処理に書き換えました。 その後の集合に対する処理については特にリファクタリングしてないです。

まとめ

2年前にやってたところまでは追いつきました。 07は特にリファクタリングする必要がないので、次は08からの予定です。

リファクタリングしているときになるのは、速度とかでしょうか。 実装の違いでなにか差が出るのかどうかはちょっと気になるところですが、 今回の目的ではないので、目をつぶって進める予定です。


comments powered by Disqus

See Also by Hugo


Related by prelims-cli