読者です 読者をやめる 読者になる 読者になる

2016年12月1日

日記

Scala にて時計の算数ができるコードを書いてたのだが、任意の桁数を扱える BigInt に mod というメソッドがあって「10 mod 7」とかで自分のオブジェクト生成をさせられないので、他の良さそうな名前を考えてたんだけど、剰余 % の結果で同値類を作るってところから「~%」というのがいいかな? 「10 ~% 7」で「3 (mod 7)」に対応するオブジェクトを生成する感じ。 まぁ、普通に英単語の「modulo」を使って「10 modulo 7」とかの方が無難かもしれないけど。

Scala の spire には EuclideanRing という型があって、mod というメソッドが定義されてるんだけど、Int 値や Long 値には使えないみたい。 あんまり原因をきちんと追ってないけど、BigInt の mod メソッドと衝突してるとかないのかなぁ。 まぁ、これ見よがしに自分で暗黙の型変換使って Int と Long に mod メソッドを定義できたので逆によかったかな。 ちなみに、BigInt の mod は % と違って常に値が正になる剰余の計算で、ユークリッド環の除算的にはこれが正しい結果になる。

ツイート (ツイート数 69)