div/mod と quot/rem
Haskell は負数の割り算をきちんとサポートしていて、剰余の符号が、割る数と割られる数のどっちに依存するかで2種類ある。
quotRem x y = (q,r) ならば x = qy + r divMod x y = (d,m) ならば x = dy + m 違いは、r の符号は x と同じ (restoring method) m の符号は y と同じ (non-restoring method)http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%B8%C0%B8%EC%A4%CE%C8%E6%B3%D3%3A%3A%C9%E9%BF%F4%A4%CE%BD%FC%BB%BB
今まで、divはマイナス無限大に向かって丸め、quotはゼロに向かって丸める*1という覚え方をしていたのですが、それは割る数(y)が正の場合の話ですね。
ちなみにRubyとPythonの整数除算はHaskellのdiv/modと同じ挙動をするようです。
負数がらみの除算はたまに出会うので、注意しておく必要があります。