2017-05-08 84 views
0

我想在Haskell中实现我自己版本的库函数div。这是我对问题的解决方案,但它不是我希望的方式工作,我不知道我还能如何实现它。任何帮助将不胜感激!在Haskell中实现库函数`div`

div' :: Int -> Int -> Int 
div' m n 
    | n == 0  = 0 
    | n > 0  = div' m (n-1) - m 
+1

它是如何工作的?你会得到什么错误信息? – Alec

+2

'div 42 0 == 0'看起来相当不对!递归的情况也是错误的。 – chi

+0

没有错误信息,只是无限循环 – newbie

回答

2

你应该处理除以0的情况吗?如果是这样,那就为此另立个案。

划分算法的基本情况应该是当一个< b。如果说你有4/7,算法会吐出什么? 当a> = b时,递归情况应该处理。这应该让你开始在自然数上定义div函数。

+0

如果你不知道这应该如何工作,发布你的代码的更新版本,我会看看并引导你通过算法更详细。 – GrainOfSalt

+0

现在就开始工作了,谢谢你让我离开! – newbie

0

你可以做类似如下:

div' :: Integral a => a -> a -> a                                          
div' m 0 = error "Exception: divide by zero" 
div' m n 
    | m < 0 = 0 - div' (-m) n 
    | n > 0 = if m < n then 0 else 1 + div' (m - n) n 
    | n < 0 = if m < -n then 0 else -1 + div' (m + n) n   
  • 如果分母为0,这是一个错误
  • 如果分子是负的,否定的分子的否定结果
  • 如果分母是正数,检查是否有要减去的内容,如果是,则递归调用
  • 如果分母是负数,请检查是否有要添加的内容,如果是,则递归调用