如何正确定义" quot"作为一个单一的功能?

时间:2018-03-21 05:15:42

标签: haskell

作为一个例子,我试图在一个函数中定义quot。我没有附加额外的参数(在这种情况下是一个计数器),很难看到如何做到这一点。

quot x y n
  | x < y = n
  | otherwise = quot (x-y) y (n+1)

quot0 x y = x y 0

我多次遇到这个问题并继续使用这个临时解决方案,而我知道必须有一种简单的方法来隐式地合并n。

2 个答案:

答案 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