4

リスト領域 :: [Double] があります。ここで、実際に整数値であるリストをフィルタリングしたいと思います。述語に対して次のようなことをしたい:

isInteger :: Double -> Bool
isInteger x = abs (fromIntegral (floor x) - x) < delta
  where delta = 0.00001

ただし、これを行うにはもっと良い方法があると思います。実際の値が整数かどうかをチェックするための Haskell イディオムはありますか?

4

1 に答える 1

7

これは私には問題なく慣用的に見えますが、おそらくroundではなく使用したいと思うでしょうfloorapproxRational結果の分母が次のとおりであることを使用して確認する1ことも検討できます。

isInteger x = denominator (approxRational x 0.00001) == 1
于 2012-06-23T22:59:08.060 に答える