在Haskell中实现库函数`div`
问题描述:
我想在Haskell中实现我自己版本的库函数div
。这是我对问题的解决方案,但它不是我希望的方式工作,我不知道我还能如何实现它。任何帮助将不胜感激!在Haskell中实现库函数`div`
div' :: Int -> Int -> Int
div' m n
| n == 0 = 0
| n > 0 = div' m (n-1) - m
答
你应该处理除以0的情况吗?如果是这样,那就为此另立个案。
划分算法的基本情况应该是当一个< b。如果说你有4/7,算法会吐出什么? 当a> = b时,递归情况应该处理。这应该让你开始在自然数上定义div函数。
+0
如果你不知道这应该如何工作,发布你的代码的更新版本,我会看看并引导你通过算法更详细。 – GrainOfSalt
+0
现在就开始工作了,谢谢你让我离开! – newbie
答
你可以做类似如下:
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,这是一个错误
- 如果分子是负的,否定的分子的否定结果
- 如果分母是正数,检查是否有要减去的内容,如果是,则递归调用
- 如果分母是负数,请检查是否有要添加的内容,如果是,则递归调用
它是如何工作的?你会得到什么错误信息? – Alec
'div 42 0 == 0'看起来相当不对!递归的情况也是错误的。 – chi
没有错误信息,只是无限循环 – newbie