最近中断気味でしたが、久々に歩きました。新松田駅から小田原駅まで。8 時前から 11 時過ぎまでの約 3 時間。線路の距離で 10.7 km 、歩きの距離で 14.2km 。
駅間距離は 2 km 程度になり、復帰戦としては気楽でした。見所とかは特になかったかな。
小田急はあと多摩線と江ノ島線です。距離は合計で 38 km ですが、移動が必要だったり駅数多めだったりするので、あと一回で行けるか難しいところです。
OCaml ではパターンマッチの抜けを警告してくれます。Haskell より OCaml の方が好きな点の 1 つです*1。
type t = Foo | Bar | Baz let f = function Foo -> "foo" | Bar -> "bar"
$ ocamlc pat-test.ml File "pat-test.ml", line 2, characters 8-44: Warning P: this pattern-matching is not exhaustive. Here is an example of a value that is not matched: Baz
今日気がついたのですが、gcc でも enum に対して同様のチェックをしてくれるようです。
enum t { foo, bar, baz }; char *f(enum t x) { switch(x) { case foo: return "foo"; case bar: return "bar"; } return NULL; }
$ gcc -Wall -c pat-test.c t.c: In function 'f': t.c:6: warning: enumeration value 'baz' not handled in switch
ふーんと思った。それだけ。
追記: はてなブックマークより
sshi ghcでも-Wつけるとパターンマッチの抜けを警告してもらえるよ
おお知らなんだ。ありがとうございます。
module PatTest where data Hoge = Foo | Bar | Baz f Foo = "foo" f Bar = "bar"
$ ghc -W -c -o pat-test.o pat-test.hs pat-test.hs:4:0: Warning: Pattern match(es) are non-exhaustive In the definition of `f': Patterns not matched: Baz
これがデフォルトでオフなのは、Haskell では (ガードに加えて) non-exhaustive なマッチを意図的に書くことが多いからでしょうかね。無限リストとか。
OCaml でもそういう場合がないことはないけど、そういう場合はちゃんとマッチさせて assert false しようという風習がある気がする。
CPU より HDD が律速の時代です。マシンが重いとき、CPU を使いまくってるプロセスはタスクマネージャですぐに分かるんですが、HDD にアクセスしまくってるプロセスを簡単に見つける方法ってないでしょうか。タスクマネージャで不満なのは、読み・書き・その他の 3 種類があっていろいろ見ないといけないことと、通算回数/量が表示されているため目で差分を計算しないといけないこと。