Haskell中的Heron方法
在这个苍鹭方法的代码中,我得到了除以零异常的结果,我在这里有点迷失了。
epsilon:: Integral a => a
epsilon = 1
heron:: Integral a => a -> a
heron r = help 0
where
help x
| abs (heron' x - heron' (x + 1)) < epsilon = heron' (x + 1)
| otherwise = help (x + 1)
heron' 0 = 1
heron' x = (1 `div` 2) * (heron' (x-1) + (r `div` heron' (x-1)))
在此代码中我必须寻找解决此问题的任何建议?
(1 `div` 2) 肯定有问题,但我需要写什么?
回答
如果您需要这种除法,您可能想要使用(/)代替div和Fractional代替Integral。所以:
epsilon:: Fractional a => a
epsilon = 1
heron:: (Fractional a, Ord a) => a -> a
heron r = help 0
where
help x
| abs (heron' x - heron' (x + 1)) < epsilon = heron' (x + 1)
| otherwise = help (x + 1)
heron' 0 = 1
heron' x = (1 / 2) * (heron' (x-1) + (r / heron' (x-1)))