Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从头开始在Haskell中创建div函数_Haskell_Math - Fatal编程技术网

从头开始在Haskell中创建div函数

从头开始在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

我的教授要求我们用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 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)