作为一个例子,我试图在一个函数中定义quot。我没有附加额外的参数(在这种情况下是一个计数器),很难看到如何做到这一点。
quot x y n
| x < y = n
| otherwise = quot (x-y) y (n+1)
quot0 x y = x y 0
我多次遇到这个问题并继续使用这个临时解决方案,而我知道必须有一种简单的方法来隐式地合并n。
答案 0 :(得分:5)
您使用where
myQuot :: Int -> Int -> Int
myQuot x y = go x 0
where
go x n
| x < y = n
| otherwise = go (x - y) (n + 1)
或let … in …
:
myQuot2 :: Int -> Int -> Int
myQuot2 x y =
let
go x n
| x < y = n
| otherwise = go (x - y) (n + 1)
in go x y 0
或者,您提供这两种功能,但为用户编写易于使用的包装器:
myQuotImp x y n = if x < y then n else myQuout (x - y) y (n + 1)
myQout3 :: Int -> Int -> Int
myQout3 x y = myQuotImp x y 0
答案 1 :(得分:5)
quot x y | x < y = 0
| otherwise = 1 + quot (x-y) y