関数型プログラミング言語Haskell Part17
■ このスレッドは過去ログ倉庫に格納されています
0880デフォルトの名無しさん
2012/03/10(土) 22:36:05.68ある関数とは以下のような目的のものだ
-1.0 以上 1.0 以下の範囲の Double 型の値があり、
これを Bounded クラスのインスタンス型の値に変換したのだが、
-1.0 を minBound の値に、1.0 を maxBound の値に、
その間を適当に補間した値にしたい
変換先の型が固定されていれば、例えば次のようにできた
quantize :: Double -> Int16
quantize x =
let b = fromIntegral (minBound :: Int16)
w = fromIntegral (maxBound :: Int16) - b
in round $ (x + 1) / 2 * w + b
これを次のような意味に解釈できる形にしたい
quantize :: (Integral a, Bounded a) => Double -> a
quantize x =
let b = fromIntegral (minBound :: a)
w = fromIntegral (maxBound :: a) - b
in round $ (x + 1) / 2 * w + b
言わんとしていることは分かってもらえると思うが、
当然このように記述すればエラーだ
この quantize 関数をポリモーフィックにする方法は何かないだろうか
■ このスレッドは過去ログ倉庫に格納されています