从头开始在Haskell中创建div函数
我的教授要求我们用Haskell编写自己的从头开始在Haskell中创建div函数,haskell,math,Haskell,Math,我的教授要求我们用Haskell编写自己的div和mult函数,只需+-。 因此,我编写了mult函数,如下所示 mult1 :: Integer -> Integer -> Integer mult1 x 1 = x mult1 x y = x + mult1 x (y-1) 它成功了。然后我试着对div进行如下编码: div1 :: Integer -> Integer -> Integer div1 0 y = y div1 x y = if x < y t
div
和mult
函数,只需+
-
。
因此,我编写了mult
函数,如下所示
mult1 :: Integer -> Integer -> Integer
mult1 x 1 = x
mult1 x y = x + mult1 x (y-1)
它成功了。然后我试着对div进行如下编码:
div1 :: Integer -> Integer -> Integer
div1 0 y = y
div1 x y = if x < y then x else
div1 x y = 1 + div1 x (x - y)
基本情况
这是错误的,应该是错误的
div1 0 _ = 0
实际上,您应该首先检查它不是0/0,但这是一个细节。实际上,您根本不需要这个子句,因为它包含在
xHow中,您将如何在另一种语言中这样做?忘记语言。在一张纸上你会怎么做?@WillemVanOnsem我会做一个while循环..你真的认为div34
应该等于3吗?你想不出在你的定义中还有什么可以改变的吗?考虑这一点:<代码> div 0 3 ,<代码> div 3<3 /代码>,和<代码> div 6 3 < /代码>相等,您如何定义<代码> div 3 3 按<代码> div 0 3 < /代码>?您指出递归步骤还不正确;此外,基本情况还不正确。
div1 0 y = y
div1 0 _ = 0
div1 x y = if x < y then x else
div1 x y = if x < y
then x
else 1 + div1 x (x - y)
div1 x y
| x<y = x
| otherwise = 1 + div1 x (x - y)